전체 글

저의 지식이 세상에 가치를 더하길 바라는 백엔드 지망생입니다.
SpringBootApplication이 동작하는 방식 run 메서드 안에 파라미터로 집어넣으면 스프링 빈으로 등록된다. run 메서드 내부적으로 ConfigurableApplicationContext를 생성한다. 이것이 스프링 컨테이너 자체이다. ComponentScan을 사용하려면 해당 어노테이션이 붙어있는 클래스가 스프링 빈으로 등록되야 한다. 빈을 찾으려면 따로 DL 기능을 제공하는 ObjectProvider를 사용하기 ObjectProvider로 찾아올때 객체의 생성, 의존관계 주입 및 초기화 까지는 스프링 컨테이너가 제공해준다. 그 뒤 반환하고 나면 컨테이너가 관리하지 않는다. 싱글톤 방식 정리 ComponentScan은 무조건 객체를 스프링 빈으로 싱글톤 등록해준다. 설정 정보에 @Confi..
· Network
jwt를 통한 로그인을 구현하면서 조금 더 자세히 정리를 해보고 싶어졌다. JWT JWT는 JSON Web Token의 약자로써 세션에 사용자 데이터를 저장하는 전통적인 쿠키 세션 방식과 다르게 json 객체에 사용자 정보의 일부를 담는다. 기존 쿠키 세션 동작 방식과 문제점 쿠키 세션 방식을 사용하는 이유를 이해하기 위해선 HTTP 프로토콜의 특성을 이해할 필요가 있다. Stateless HTTP 프로토콜은 클라이언트와 서버의 통신이 끝나자마자 상태 정보를 잊어버린다. 예를 들어 USER1이 방금 전까지 서버와 통신을 했더라도 연결이 끊기자마자 USER1이 누구인지 까먹어버리고 다시 클라이언트의 정보를 요구하는 것이다. 페이지를 이동할때마다 내가 누구인지 확인하는 로그인 창이 뜨면 매우 귀찮을 것이다...
스프링 빈은 생성부터 종료까지 일정한 생명주기를 가진다. 스프링 컨테이너 생성 -> 스프링빈 객체 생성 -> 의존 관계 주입 -> 기능 동작 -> 스프링 빈 종료 -> 프로그램 종료 스프링 빈으로 등록된 객체를 정상 사용하려면 의존 관계까지 완벽하게 주입 완료된 상태여야 한다. 만약 의존 관계 주입이 완료되지 않은 상태에서 의존 관계 주입 대상을 사용한 로직을 수행한다면 NULL 값이 뜰 수 밖에 없다. 또한 스프링 빈으로 등록된 객체에서 네트워크 소켓 연결이나 DB 연결을 사용한다면 어플리케이션 종료 시점에 커넥션을 잘 끊어줘야 자원의 낭비나 오류를 막을 수 있다. 이를 해결하려면 우리는 스프링 빈의 의존관계 주입 완료 시점과 스프링빈 종료 시점을 파악할 수 있어야 한다. 스프링에서는 이 시점들을 알려..
싱글톤 패턴 싱글톤 패턴은 애플리케이션이 시작 될 때 static을 통해 인스턴스를 메모리에 딱 하나 할당하고, 뒤의 호출 시 마다 해당 인스턴스를 반환해주는 디자인 패턴이다. 생성자를 private으로 설정하기 때문에 외부에서 생성자를 통해 인스턴스를 만들 수 없다. public class NoteBook { private static NoteBook noteBook = new NoteBook(); public static NoteBook getInstance() { return noteBook; } private NoteBook(){}; } NoteBook이라는 클래스를 간단히 싱글톤 패턴으로 구현한 코드다. 보통의 경우 생성자를 public으로 열어서 사용자가 직접 인스턴스를 생성해서 사용하도록 한..
스프링은 객체 지향의 SOLID 원칙을 지키기 위해 어플리케이션을 동작 시키는 사용 영역과, 각 객체들의 생성과 의존관계 주입을 책임지는 구성 영역으로 코드를 분리 시킵니다. 단순 자바코드로 config 클래스를 만든 후 사용 영역에 주입할 수도 있지만 스프링은 어노테이션 기반으로 사용할 수 있는 스프링 컨테이너와 스프링 빈을 제공합니다. 스프링 컨테이너 생성 스프링 컨테이너는 ApplicationContext 라는 인터페이스를 통해 사용할 수 있습니다. ApplicationContext ac = new AnnotationConfigApplicationContext(); 코드를 보면 ApplicationContext의 실제 구현체로는 AnnotationConfigApplicationContext 가 들어..
· Spring/JPA
JPA에서 영속성 컨텍스트는 가장 중요한 내부 동작 원리 중 하나입니다. 오늘은 영속성 컨텍스트의 역할과 구성에 대해서 정리해보겠습니다. 영속성 컨텍스트란 우선 영속성 컨텍스트는 눈에 보이지 않는 논리적인 개념입니다. 우리는 엔티티 매니저를 통해서 이 논리적인 공간에 접근 할 수 있습니다. # 먼저 엔티티 매니져를 생산할 수 있는 엔티티 팩토리를 만들어줍니다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); # persist를 통해서 entity를 영속성 컨텍스트에 저장할 수 있다. em.persist(entity); 위 코드의 pers..
· Network
HTTP란? HTTP는 Hyper Text Transfer Protocol의 줄임말으로써 서버와 클라이언트간에 데이터를 주고 받는 프로토콜입니다. HTTP는 텍스트, 이미지,영상, JSON 등등 거의 모든 형태의 데이터를 전송할수 있습니다. 세상에 등장한지 벌써 30년이나 된 HTTP는 1997년 만들어진 HTTP/1.1가 가장 보편화 되어있으며, 현재는 HTTP/2를 거쳐 HTTP/3까지 개발된 상태입니다. TCP를 개선해서 만들어진 UDP가 HTTP/3 기술에 사용됩니다. 이번 포스팅은 HTTP와 HTTPS의 보안적 차이를 설명하는 것이 목적임으로 HTTP에 대한 자세한 설명은 차후의 포스팅에서 진행하겠습니다. HTTP는 보안적으로 안전한가? HTTP 통신은 클라이언트와 서버간의 통신에 있어서 별다른..
Jemlog
깊게 자라기