분류 전체보기 328

Pro*C

1. Pro*C란 ? 대부분의 DBMS는 외부 C 프로그램에서 DB관련 로직을 짤 수 있게 선행 컴파일러를 제공한다. Pro*C란 오라클에서 제공해주는 선행 컴파일러이다. 오라클은 PL/SQL이라는 절차형 언어를 제공한다. 하지만 PL/SQL은 오라클 내부에서 실행되는 프로그램이다. Pro*C는 선행 컴파일러이기 때문에 이 자체만으로 실행파일을 만들어낼 수 없다. Pro*C파일(.pc)파일은 컴파일되어 C프로그램 파일(.c)을 만들어낸다. 그 이후로는 C 프로그램과 똑같다. 2. Pro*C 컴파일 하는 법 소스파일은 SQL문을 포함하며 확장자 .PC를 갖는다. 이 경우 컴파일을 두 번 해주어야 한다. Pro*C 컴파일로 C 파일을 생성하고, C파일을 다시 컴파일해서 실행파일을 만들어 줘야 한다.(.c -..

CS/DataBase 2023.01.08

Jenkins, Docker, SpringBoot, React or Vue

0. Docker-compose로 구성 version: '3' services: jenkins: container_name: jenkins image: jenkins/jenkins ports: - "8080:8080" volumes: - "$PWD/jenkins_home:/var/jenkins_home" networks: - net remote_host: container_name: remote-host image: remote-host build: context: centos7 networks: - net db_host: container_name: db image: mysql:5.7 environment: - "MYSQL_ROOT_PASSWORD=1234" volumes: - "$PWD/db_data..

CentOS에 Jenkins 설정

1. CentoOS에 Docker 설치하기 # Docker 저장소 설치 $ curl -fsSL https://get.docker.com/ | sh # Docker 서비스 시작 $ sudo systemctl start docker # Docker 서비스 작동 상태 확인 $ sudo systemctl status docker # Docker 서비스를 운영체제 부팅시 자동 시작하도록 설정 $ sudo systemctl enable docker # docker 명령어를 sudo 없이 사용하기 위해 계정을 docker 그룹에 소속 (계정 재접속 필요) $ sudo usermod -aG docker ec2-user # 설치된 docker 버전 확인 $ docker --version Docker version 19...

Lombok @Setter 사용 지양 & lombok.config

1. Lombok의 Setter 사용 지양해야하는 이유 - Builder 패턴을 사용해라 1) Setter 메소드를 사용하면 값을 변경한 의도를 파악하기 어렵다. 왜, 어떠한 의도로 데이터를 변경하는지 명확하게 알 수 없다. 코드를 역추적해봐야 한다 2) 객체의 일관성을 유지하기 여럽다. 자바 빈 규약을 따르면 Setter는 public으로 언제든지 변경할 수 있는 상태가 된다. 따라서 모든 곳에서 데이터를 변경할 수 있는 상태가 되기 때문에 객체의 일관성을 유지하기 어려워진다. 2. Setter의 대안 1) 생성자 오버로딩 -> 생성자를 오버로딩하기, 그러나 멤버변수가 많고 다양한 생성자를 가지게 된다면 코드가 길어지고 가독성이 떨어짐 따라서 Builder 패턴 사용 public class School..

@JsonIgonore, @JsonProperty, @JsonNaming & Jackson Object Mapper

"Java Object" =Serialize=> "JSON", (2) "JSON" =Deserialize=> "Java Object" JSON(JavaScriptObjectNotation) 상하차가 쉬운 언어는 Javascript 0. JSON 이란? = 데이터를 보관하는 형식 복잡한 데이터를 인터넷에서 유저들끼리 주고 받을 때 깔끔한 형식으로 데이터를 담는데 필요한 형식이 있다. 이 중에 XML, CSV, JSON이 있다. 1) XML 값 2) CSV Year, Brand, Mode 1997,Ford, E350 3) JSON ~ ... YAML, BSON, SMILE 등 -> 보통 설정 파일에 많이 사용한다. ex) package.json ※ JSON 이랑 JavaScript의 일반 Object는 다르..

Spring 예외 처리 전략 및 Global 예외처리 // @RestControllerAdivce

1. 예외처리 - 발생위치에 따른 구분 Dispatcher Servlet 내에서 발생하는 예외(99%-Controller, Service, Repository) vs. Dispatcher Servlet 전 Filter에서 발생하는 예외 2. 예외처리 방법 1. Controller 단에서의 예외처리 @ExceptionHandler - Contorller 메서드 내의 하위 레이어(Service, Repository 등)에서 예외 발생해도 중간에 처리하지 않는 이상 Controller단까지 예외처리가 던져지고 @ExceptionHandler가 예외를 처리하게 됨. 2. 전역에서 예외처리 - @(Rest)ControllerAdvice - Controller 내의 @ExceptionHandler와 Controll..

Spring - 인터셉터

1. HandlerInterceptor 인터셉터는 Controller의 핸들러가 실행 되기 전이나 후에 추가적인 작업을 실행하기 위해 사용한다. 예를 들어 권한 체크, 로그인 체크 등 관리자 인터셉터 public class AdminInterceptor implements HandlerInterceptor { static final Logger LOGGER = LoggerFactory.getLogger(AdminInterceptor.class); /** * 관리자 페이지는 관리자만 접근 허용. */ public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) { HttpSession session = re..

Exception Handling

예외 처리를 하는 근본적인 이유 : 프로그램이 오작동하거나 비정상 종료를 막기 위해 1. 종류 1) 컴파일 에러(compile-time error) : 구문 체크, 번역, 최적화, 생략된 코드 추가 등을 컴파일러가 한다. 2) 런타임 에러(runtime error) : 프로그램 실행 중 발생하는 에러 (프로그램 종료) - 에러(Error) : 프로그램 코드에 의해 수습될 수 없는 심각한 오류 ex) 메모리 부족, Out of Memory error 혹은 스택오버플로우 StackOverFlowError) - 예외(Exception) : 프로그램 코드에 의해 수습될 수 있는 다소 미약한 오류 --> 예외처리로 프로그램의 비정상적 종료 막을 수 있다. 3) 논리적 에러(logical error) : 작성 의도..

SessionStatus, @SessionAttributes, @SessionAttribute

1.SessionStatus란 SessionStatus는 @SessionAttributes를 활용해 Session에 남긴 데이터를 정리하는데 활용을 하는 인터페이스이다. model.addAttribute("dutch", "hello"); 일반적으로 위 코드 처럼 "dutch" 라는 키로 model에 세팅하면 응답 이후 값이 삭제 된다. 하지만 컨트롤러 클래스 상단에 @SessionAttribues 를 세팅 후 사용한다면 동작이 변경되게 된다. @RequestMapping("dutch") @Controller @SessionAttributes("dutch") public class DutchController @SessionAttributes선언 후 model.addAttribute 를 호출한다면 해당 k..