전체 글
-
(삽질 기록..) Could not write request: no suitable HttpMessageConverter found for request type , and content type [application/json;charset=UTF-8]IT 2022. 5. 14. 13:55
배치 어플리케이션 개발 중에 RestTemplate 을 사용해서 POST 방식으로 api 를 호출해서 데이터를 갖고 와야하는데, 배치를 실행하자마자 아래 에러가 발생했다. Header 값으로 MediaType 을 아래와 같이 셋팅해줬지만 계속 에러가 발생했다. 다른 블로그를 찾아봐도 Header 값을 새로 셋팅하라는 해결법 밖에 없었다... 블로그를 찾다가 지쳐갈때쯤, 객체가 제대로 나오는지 이제야 확인했다..😭 제대로 객체 데이터를 못갖고 오는 것 같아서 객체의 어노테이션을 확인해보니 @Data 어노테이션이 빠져있었다. (처음에 객체 어노테이션 확인을 제대로 확인을 안해서 삽질했다.) @Data 어노테이션 이후 객체도 잘 갖고오고 호출도 정상으로 됐다(해결!)
-
setcap/getcapIT 2022. 2. 4. 17:46
Linux 에서 TCP나 UDP 0~1023 이하의 (well known)포트를 서비스에 할당하기 위해서는 root 사용자 권한이 필요하다. 단순히 root 로 실행하는 것보다 setcap 을 이용하여 권한을 부여하는 것을 권장한다. (root 권한 사용시 보안이 취약할 수 있음) setcap 명령어 옵션 -e : effective 효력 부여 -p : Permitted 허용 -i : Inheritable 권한 상속 여부 권한 부여(setcap) setcap 'cap_net_bind_service=+ep' /usr/lib/nginx - 효력(effective) 부여와 허용(Permitted) 권한 확인 (getcap) getcap /usr/bin/nginx 권한 삭제(setcap) setcap -r /us..
-
아이템 4 . 인스턴스화를 막으려거든 private 생성자를 사용하라EffectiveJava 2021. 4. 21. 22:29
정적 메서드와 정적 필드만을 담은 클래스를 만들 때 예시 java.lang.Math java.util.Array java.util.Collections final 클래스와 관련한 메서드들 기본 타입, 배열 관련 메서드, 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을 수 있음 위에처럼 정적 멤버만들 담은 유틸리티 클래스는 인스턴스로 만들려고 설계한 것이 아니지만, 컴파일러가 자동으로 기본 생성자를 만든다. 매개변수를 받지 않는 public 생성자가 만들어짐. 컴파일러가 기본 생성자를 만드는 경우 명시된 생성자가 없을 때 추상 클래스로 만드는 것으로는 인스턴스 화를 막을 수 없음 해결방법 private 생성자를 추가하여 클래스의 인스턴스 화를 막을 수 있음 (상속은 불가능) public..
-
아이템 3 . private 생성자나 열거 타입으로 싱글턴임을 보증하라EffectiveJava 2021. 4. 21. 21:56
싱글턴(Singleton) 하나의 인스턴스만을 생성할 수 있는 클래스 싱글턴을 만드는 방식 생성자를 private으로 만들고, 생성자에 접근할 수 있는 수단으로 public static멤버가 final인 경우 public class Employee { public static final Employee INSTANCE = new Employee(); private Employee() {}; .. } 첫 번째 방식으로 코드를 작성 할 경우, 코드에서 해당 클래스가 싱글턴임이 드러난다는 장점이 있다. 생성자를 private으로 만들고, 정적 팩터리 메서드를 public static 멤버로 제공 public class Employee { private static final Employee INSTANCE =..
-
아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라EffectiveJava 2021. 4. 16. 16:10
파라미터가 너무 많은 경우 점층적 생성자 패턴(telescoping constructor pattern) 을 주로 사용했다. 점층적 생성자 패턴 필요한 파라미터에 따라 생성자를 모두 만드는 것 public class Food { private final String name; private final int servings; private final int calories; private final int fat; ... public Food(String name, int servings) { this(name, servings); } public Food(String name, int servings, calories) { this(name, servings, 0); } } 점층적 생성자 패턴을 이용하..
-
아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라EffectiveJava 2021. 4. 15. 16:03
클라이언트가 클래스의 인스턴스를 얻는 방법 public 생성자 정적 팩터리 메서드(static factory method) 정적 팩터리 메서드(static factory method)란? 클래스의 인스턴스를 반환하는 정적 메서드 객체 생성의 역할을 하는 메서드라고 볼 수 있음 예시 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }정적 팩터리 메서드의 장점 이름을 가질 수 있음 이름을 지어 반환될 객체의 특성을 쉽게 표현할 수 있다 ex) 소수점을 반환하는 메서드 BigInteger.probablePrime 은 BigInteger(int, int, Random) 처럼 파라미터로 파악하는 것보다 메서드의 ..
-
빈 생명주기 콜백IT 2021. 4. 13. 12:19
스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 소멸전 콜백 -> 스프링 종료 초기화 콜백에서 빈이 생성되고, 빈의 의존 관계 주입이 완료된 이후에 호출 소멸전 콜백은 빈이 소멸되기 직전에 호출된다. 스프링은 3가지 방법으로 빈 생명주기 콜백을 지원한다. 인터페이스(InitializingBean, DisposableBean) 초기화, 소멸 메서드 생성하여 설정 정보에 지정 @PostConstruct, @PreDestroy Annotation 지원 1. InitializingBean, DisposableBean 이전에 InitializingBean, DisposableBean를 사용하여 빈을 초기화 하거나 빈의 생명 주기가 끝나기 전에..
-
Nginx 443port 설정하기IT 2021. 4. 8. 17:59
Nginx SSL 설정하기 SSL이란? Secure Socket Layer이라는 약자로 보안 소켓 레이어로, 443포트를 사용하며, 모든 정보전송을 암호화프로토콜을 사용하여 안전하게 전송되도록 만든다. TCP/IP를 사용하는 통신에 적용됨 클라이언트 서버간의 통신 내용이 노출되거나 변경되는 것을 방지 클라이언트가 접속하여는 서버가 신뢰할 수 있는 서버인지 확인 가능 SSL에서는 암호화를 사용하는데, 암호/키를 통해 신뢰할 수 있는 서버인지 확인한다. 클라이언트 서버 접속 -> 서버는 클라이언트에게 인증서 정보 전달 -> 클라이언트는 인증서 정보가 신뢰할 수 있는 것인지 검증 -> 다음 절차 수행 SSL의 암호화 종류 암호화 : 암호를 만드는 행위 복호화 : 암호를 푸는 행위 키 : 암호화를 할때 사용하는..