Gmail Smtp 534-5.7.14와534-5.7.9에러
2021. 9. 30. 21:25
기타 IT
gmail smtp를 사용하여 새로운 글이 등록되면 메일 전송하는 서비스를 운영 중입니다. 그런데 로컬에서는 정상동작 하는데 ec2(운영)서버만 가면 에러가 발생하였습니다. 🔍 534-5.7.14에러 먼저 아래와 같은 에러가 발생하였습니다. 이는 보안이 낮은 앱에서 접근 시 발생하는 에러입니다. Caused by: javax.mail.AuthenticationFailedException: 534-5.7.14 찾아본 결과 보안이 낮은 수준의 앱 접근을 허용한다. 하지만 저는 허용을 해도 접근이 되지 않았습니다. 2단계 인증 등록 이 의미는 2단계 인증을 사용하여 보안을 강화해야 하라는 의미입니다. 기존 에러는 해결 되었지만 하지만 새로운 에러가 발생하였습니다. 🔍 534.5.7.9에러 위 에러를 해결하니 ..
스프링부트 캐시 정책 적용하기
2021. 9. 30. 21:24
Spring
현재 제가 운영하는 devlogmoa 서비스는 캐시처리가 필요할만큼 많은 파일이 존재하지는 않습니다. 하지만 okky에서 피드백을 받게되어 이참에 한 번도 해보지 못했던 캐싱 처리를 해보려고 합니다. (캐시란??) ✔️ 무엇을 캐싱할까? 아주 간단하지만 사진과 같이 bootstrap.css와 bootstrap.js를 캐시 정책을 적용하려고 합니다. 이런 정적파일은 자주 변화가 일어나지 않는 것이기 때문에 굳이 매번 서버에서 가져올 필요 없습니다. 지금은 파일이 몇개 없어 성능에 영향이 없겠지만, 네이버 같이 방대한 양의 정적파일이 존재한다면, 성능에 영향을 끼치게 됩니다. 일단 캐시 사용 전의 상태를 보겠습니다. 보시는 바와 같이 재접속을 계속해도 Cache-Control이 no-store로 되어있습니다..
싱글톤에서의 상태값
2021. 9. 26. 22:15
기타 IT
스프링 DI컨테이너는 디폴트로 싱글톤으로 관리하게 됩니다. 싱글톤은 객체를 매번 새로 생성하지 않아 메모리 관리에 효율적입니다. 하지만 가장 큰 단점은 객체를 공유한다는데 있습니다. 그렇기 때문에 싱글톤은 상태값을 가지면 안됩니다. 왜 상태값을 가지면 안되는지 알아보도록 하겠습니다. 🔍 상태값을 가지면 안되는 이유 싱글톤 객체 @Getter @Setter public class SingletonT { private final static SingletonT instance = new SingletonT(); private String name; public static SingletonT getInstance() { return instance; } public String setLocalVariable..
IoC, DI 컨테이너
2021. 9. 26. 22:14
기타 IT
✔️ IoC와 DI 무엇일까? 🔍 IoC(Inversion of Control) 제어의 역전 코드를 사용하는 클라이언트가 직접 제어를 하지 않고 오직 인터페이스에만 의존하여 사용하는 방식을 의미 합니다. 구현체가 변경이 되어도, 클라이언트 코드는 변경하지 않아도 되며, 구현체를 변경할 때 제어를 담당하는 객체에서 구현체만 갈아 끼워주면 되기 때문에 유지보수에 아주 용이합니다. 아래 코드는 Repository 인터페이스를 사용하는 코드입니다. 하지만 클라이언트(service)는 Repository가 어떤 구현체인지 전혀 알지 못하며, 구현체가 변경 되더라도 전혀 지장이 없습니다. 즉, 제어권이 없는 것이죠. public class Service { private final AppConfig appConfi..
라이브러리와 프레임워크 차이
2021. 9. 26. 22:13
기타 IT
라이브러리 암호화 처리, Jackson 등과 같이 사용하는 프로그램에서 이를 제어하게 되는 것을 라이브러리라고 합니다. Jackson에서 나의 프로그램을 제어하는 것이 아닌 내 프로그램에서 Jackson을 제어하는 것입니다.프레임워크 스프링, Junit등과 같이 자신의 라이프 사이클에 맞춰 나의 프로그램을 제어하는 것을 프레임워크라고 합니다. 즉, 내 프로그램이 스프링에 의해 제어가 되는데 이를 프레임워크라고 합니다. 제어권에 차이가 있는 것인데, 라이브러리는 클라이언트가 제어하는 것이고, 프레임워크는 클라이언트가 제어되는 것!! 입니다.
@Configuration과 싱글톤
2021. 9. 24. 22:27
Spring
✔️ @Configuration과 싱글톤의 관계 스프링 컨테이너에서 관리하도록 해주는 설정 정보 애노테이션 입니다. @Bean과 같이 사용됩니다. 그렇다면 싱글톤과 무슨 관계가 있을까요? 코드를 보며 설명하겠습니다. AppConfig @Configuration public class AppConfig { @Bean public Service1 service1() { System.out.println("call AppConfig.service1"); return new ServiceImpl1(discountPolicy()); } @Bean public Service2 service2() { System.out.println("call AppConfig.service2"); return new Service..
AOP란
2021. 9. 24. 22:26
Spring
✔️AOP(Aspect Oriented Programming) 관점 지향 프로그래밍 원하는 관점을 기준으로 프로그래밍을 하는 방식입니다. 음... 오히려 번역하고 설명하려면 더욱 이해하기 어려운 용어 같아서 간단하게 설명하자면, 중복된 기능을 클라이언트의 코드 변경없이 재사용하도록 하는 기법 이라고 보는게 좋을 것 같습니다. 🔍 순수 자바로 보는 AOP 순수 자바로 AOP를 구현 해보겠습니다. AOP에는 여러가지 방법이 있지만, 그 중 스프링에서 사용되는 Proxy 패턴에 대하여, 알아보도록 하겠습니다. Proxy는 아주 얕은 지식으로 이해한 바는 대부분 가짜라는 의미를 가지고 있습니다. 즉, 실제 객체를 사용하는 것이 아닌 관련된 다른 가짜를 만들어서 적용하는 패턴을 의미합니다. 코드로 살펴보겠습니다...
static메서드에 generic 사용
2021. 9. 24. 22:24
Java
✔️ static 메서드에 generic 사용이 가능할까? 결과를 먼저 보자면 가능합니다. static은 공유 자원이기 때문에 메서드의 매개변수에 generic 사용이 불가능 할 것이라 생각할 수 있지만, 아닙니다. 저는 그렇게 생각이 들었습니다. 공유를 하는데 매번 매개변수가 바뀐다고?? 라고 단순히 생각했습니다. 하지만 조금 더 생각 해보면 아니라는 것을 알 수 있습니다. 공유를 하던 안하던 전혀 무관한 내용입니다. 클래스의 타입 매개변수와 메서드의 타입 매개변수를 이해하면 됩니다. 클래스의 타입 매개변수는 class A과 같이 선언 합니다. 이는 인스턴스 변수로 인식됩니다. 즉, static에서는 당연히 사용할 수가 없습니다. 하지만 메서드의 타입 매개변수는 static void test(T a) ..