java spring 13

War와 Jar 파일 차이점

- War 파일 War 파일은 Jar 파일과 다르게 내장 웹 애플리케이션 서버(WAS)가 존재하지 않아, 웹 애플리케이션 서버(WAS)를 별도로 설치 후에 WAS 기반 위에서 실행된다. 개발 환경에서도 별도록 WAS와 연동되도록 추가 설정을 해주어야 한다. - Jar 파일 Jar 파일 빌드 시에 내장 톰켓을 포함하고 있다. Jar 파일을 실행하기만 하면 톰캣(Was)가 함께 실행된다. 개발환경에서 WAS를 별도로 연동하기 위한 설정을 진행하지 않아도 된다.

java spring 2023.12.26

Spring boot에 log4j2 적용하기

- Log4j2 사용 배경 신입 1개월 차에 회사에서 Spring boot로 Proxy 서버를 만드는 과제를 받았다. Proxy 서버의 기능이 어느정도 구현된 이후에 PO님께 미션을 받았다. PO님 : 이제 이걸 백그라운드로 배포해야 하는데. log4j로 로그가 파일로 남기게 설정해주세요~ 개발한 코드의 사후관리를 위해서는 모니터링이 꼭 필요하다. 이 모니터링을 위해서 애플리케이션의 로그를 파일로 남겨지도록 해야한다. - Log4j2 적용 방법 1. build.gradle에 dependency 추가 Spring boot를 사용한다면 다음과 같이 dependency가 추가되어 있을 것이다. dependencies { implementation 'org.springframework.boot:spring-bo..

java spring 2022.02.27

HttpClient WARNING: Cookie rejected: Illegal domain attribute 해결방법

RestTemplate을 사용하여 특정 Url을 조회하는 코드를 포함한 Spring boot 프로젝트를 서버를 배포하던 중 다음과 같은 오류가 발생하였다. 2022-01-28 13:17:32.243 WARN 10664 --- [ restartedMain] o.a.h.c.protocol.ResponseProcessCookies : Invalid cookie header: "Set-Cookie: AWSALB=GLC7UzreO+rTzXNlwMuiB6mONl3Ih++VelqGEo8WUnZ8XsW7l9RwIDsOXFipfqfNFHjkWEwl2vbSpLuPj30vNHsti8uYx8pNudxsFmF2g5z5WK4dMyiAN8AKy4ng; Expires=Thu, 12 Aug 2021 04:17:32 GMT; Path=..

java spring 2022.01.30

자바 오버라이딩 오버로딩

자바에서 다형성을 지원하는 방법은 오버로딩과 오버라이딩이 있다. (다형성: 같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질) 오버로딩(Overloading) (확장) 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다. 기존에 없던 새로운 메서드를 정의하는 것이다. package joon; public class Member { // test() 호출 void test(){ System.out.println("매개변수 없음"); } // test에 매개변수로 int형 2개 호출 void test(int a, int b){ System.out.println("매개변수 "+ a + "와 " + b); } // test에 매개변수 double형 1개 호출 v..

java spring 2021.12.16

자바의 클래스 멤버 변수 초기화 순서

static 변수 선언부 -> 필드 변수 선언부 -> 생성자 block 1. static 변수 선언부 클래스가 로드될 때 변수가 가장 먼저 초기화된다. 2. 필드 변수 선언부 객체 생성될 떼 생성자 block보다 앞서 초기화됨 3. 생성자 block 객체 생성될 때 JVM이 내부적으로 locking 필드 변수 중 finla 변수의 가시화는 생성자 block이 끝난 다음. 필드 변수 선언부에서 이미 초기화되었다면 그 값들을 덮어씀.

java spring 2021.12.16

Spring Boot Rest API image 파일 전송

domain import lombok.AllArgsConstrutor import lombok.Builder import lombok.Data import lombok.NoArgsConstructor @Builder @AllArgsConstrutor @NoArgsConstructor @Data @Entity public class Image{ @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private Stirng caption; private String postImageUrl; //사진을 전송받아서 서버에 특정 폴더에 저장 // DB에 그 저장된 경로를 insert @JoinColumn(name = "userId") // ..

java spring 2021.08.15

spring boot JWT 실습(1)

build.gradle에 library 추가 SpringSecurity 및 Jwt 관련 라이브러리를 build.gradle에 추가한다. implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'io.jsonwebtoken:jjwt:0.9.1' JwtTokenProvider 생성 Jwt 토큰 생성 및 유효성 검증을 하는 컴포넌트. Jwt는 알고리즘과 비밀키를 가지고 토큰을 생성하게 된다. 이때 Claim 정보에는 토큰을 부가적으로 실어 정보를 세팅할 수 있다. Claim 정보에 회원을 구분할 수 있는 값을 세팅하였다가 토큰이 들어오면 해당 값으로 회원을 구분하여 리소스를 제공하면 된다. 그리고 Jwt 토큰에는..

java spring 2021.07.31

Spring boot Exception 처리

Cotroller를 사용하다보면 예외처리를 반복적으로 수행해야 할 때가 있다. 예를 들어, IllegalArgumentException일 경우, 400으로 응답 알 수 없는 Exception의 경우 500(INTERNAL_SERVER_ERROR)를 발생시키거나 @GetMapping("/api/v1/members") public ResponseEntity getAllMember(Pageable pageable) { Page memberPage; // 반복적으로 발생하는 Try-Catch try { memberPage = memberFindService.getAllMemberPage(pageable); } catch (RuntimeException re) { return ResponseEntity.badRe..

java spring 2021.07.30

DAO, DTO, Service

DAO(Data Access Object) DB를 사용해 데이터를 조회하거나 조작하는 기능을 담당하는 것들을 DAO라고 부른다. domain logic (비즈니스 로직이나 DB와 관련없는 코드들)을 persistence mechnism과 분리하기 위해 사용한다. - persistence mechnism: Database에 data를 CRUD(Create, Read, Update, Drop)하는 계층 DAO를 만들지 안흥면 비즈니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 Driver를 로드하고 Connection 객체를 생성하게 되면 엄청 많은 커넥션이 발생하게 되기 때문이다. Spring에서 DAO는 @Repository annotation으로 정의한다. DTO(Data Transfer Objec..

java spring 2021.07.29