본문 바로가기

전체 글

(76)
[HTTP] HTTP, HTTPS, SSL Handshake HTTP HTTP는 HyperText Transfer Protocol의 약어로 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜입니다. 즉 클라이언트와 서버 사이에서 데이터를 주고 받을 수 있도록 정해진 규칙이며 HTML 문서와 같은 리소스들을 가져올 수 있도록 도와줍니다. HTTP 특징 클라이언트 서버 구조 무상태 프로토콜(stateless) 비연결성(connectionless) HTTP 메시지 단순함 확장가능 클라이언트 서버 구조 HTTP는 클라이언트 서버 구조로 되어있는데 클라이언트가 서버에 요청을 보내면 서버에서 요청에 대한 결과를 만들어서 응답해 줄 때까지 대기하는 구조입니다. 이렇게 클라이언트와 서버로 나누어져 있을 때 장점은 서비스 로직이나 데이터를 다루..
[HTTP] TCP와 UDP의 특징 (TCP 3-way, 4-way handshake) TCP(Transmission Control Protocol) TCP(Transmission Control Protocol)는 직역하면 전송 제어 프로토콜이라는 뜻으로 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜입니다. 데이터는 IP(Internet Protocol)을 통해 데이터를 여러 개의 조각들로 나눈 패킷(Packet)이라는 통신 단위로 나뉘어 전송되는데 IP(Internet Protocol)만으로는 다음과 같은 한계가 있습니다. 비연결성 대상 서버가 패킷을 받을 수 있는 상태인지 아닌지 모르기 때문에 패킷을 받을 대상이 없거나 서비스가 불능 상태여도 패킷이 전송됩니다. 비신뢰성 데이터는 인터넷 망에 존재하는 여러 서버(노드)들을 거쳐 대상 서버로 전달 되는데 ..
[Spring] 스프링 빈 설정 (XML, JAVA, Component Scan) 1. XML 스프링의 애플리케이션 컨텍스트는 XML에 담긴 DI 정보를 활용할 수 있습니다. DI 정보가 담긴 XML 파일은 를 루트 엘리먼트로 사용하고 안에는 여러 개의 을 정의할 수 있습니다. 태그에 사용되는 속성들 속성 이름 설명 id 빈 객체의 고유 이름으로, 빈 id를 이용해 빈에 접근합니다. name 객체의 별칭입니다. class 생성할 클래스입니다. 패키지 이름까지 입력해야 합니다. constructor-arg 생성자를 이용해 값을 주입할 때 사용합니다. property setter를 이용해 값을 주입할 때 사용합니다. setter를 이용한 DI 기능 PersonService public interface PersonService { public void sayHello(); } Person..
[Spring] Spring Framework, Spring Web MVC Framework 웹 어플리케이션을 개발하기 위해서는 기본 기능과 많은 기능을 설계, 작성해야 합니다. (요청처리, 세션관리, 리소스 관리, 멀티 쓰레드 등) 하지만 기본적인 공통 구조(framework)를 제공한다면 개발자는 웹 어플리케이션 기능 자체 개발에만 신경 쓰면 되기 때문에 생산성이 높아집니다.. 개발자 입장에서는 완성된 구조에 자신이 맡은 코드만 개발해서 넣어주면 되기 때문에 개발 시간을 단축할 수 있습니다. Spring Framework의 특징 POJO(Plain Old Java Object) 방식의 프레임워크 - EJB가 기능 작성을 위해서 인터페이스를 구현하거나 상속하는 것에 비해 일반적인 자바 객체를 이용해서 그대로 사용할 수 있음을 의미합니다. 의존성 주입(DI, Dependency..
[Spring] SecurityConfig, OAuth2UserDetailsService 순환 참조 오류 오류 Spring Security와 OAuth 2.0 프레임워크를 이용하여 소셜로그인을 구현하던 중 SecurityConfig 파일과 DefaultOAuth2UserService 클래스를 상속받은 OAuth2UserDetailsService 클래스 사이에서 순환 참조 오류가 발생했다. 오류 원인 SecurityConfig @Configuration @Log4j2 @EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled = true) @RequiredArgsConstructor public class SecurityConfig { private final OAuth2UserDetailsService oAuth2UserDetailsService; priv..
[Spring] Spring Security, JWT, OAuth 2.0 Spring Security Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티에서 가장 핵심적인 개념은 인증(Authentication)과 인가(Authorization)로 사용자가 누구인지 확인하는 절차를 인증이라고 하고 인증된 사용자가 요청한 자원에 접근이 가능한지 확인하는 절차를 인가라고 한다. Spring Security 인증과정 사용자가 로그인 정보와 함께 인증 요청 (HttpRequest) AuthenticationFilter가 요청을 가로챔. 이때 가로챈 정보를 통해 UsernamePasswordAuthenticationToken 객체 생성 ProviderManager (Authenticati..
[DB] 트랜잭션과 격리 수준 트랜잭션이란? 트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러개의 연산이 수행될 수 있다. 그리고 트랜잭션은 아래 네 가지 원칙(ACID)가 반드시 지켜져야 한다. 원자성 (Atomicity) 처음에 언급했듯이 트랜잭션에는 여러개의 연산이 수행될 수 있는데 이 연산들이 모두 성공하거나 모두 실패해야 한다. 예를 들어 은행의 계좌 이체 서비스를 개발한다고 가정하면 하나의 계좌에서는 출금이 이루어져야 하고, 이체의 대상이 되는 계좌에는 입금이 동시에 일어나야 한다. 만약 출금에는 성공했는데 입금에는 실패한다면 결국 출금 계좌의 주인은 돈만 잃은 셈이 된다. 즉 한 트랜잭션 안에 있는 모든 연산이 성공했을때만 커밋(COMMIT)되어 데이터베이스에 영..
[JPA] N + 1 문제와 해결방법 N + 1 문제란? 처음 조회한 데이터 수만큼 다시 SQL을 사용해서 연관 관계가 설정된 엔티티를 조회하는 것을 N + 1 문제라고 한다. N + 1 문제는 em.find() 메소드나 스프링 데이터 JPA의 findById() 메소드 같은 단건 조회 시에는 연관된 엔티티를 조인해서 한번에 조회해오기 때문에 문제가 되지 않지만 JPQL을 이용한 메소드를 호출할 때는 문제가 발생한다. N + 1 상황을 만들기 위해 아래와 같이 엔티티를 설정했다. Member 엔티티 @Entity @Getter @Setter @NoArgsConstructor public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private..