[Git] Git Advanced
·
Git
Git undoing Git 작업 되돌리기(Undoing) Git에서 되돌리기는 작업 상태에 따라 크게 세 가지로 분류 Working Directory 작업 단계 Working Directory에서 수정한 파일 내용을 이전 커밋 상태로 되돌리기 git restore Working Directory에서 수정한 파일을 수정 전 (직전 커밋)으로 되돌리기 이미 버전 관리가 되고 있는 파일만 되돌리기 가능 git restore를 통해 되돌리면, 해당 내용을 복원할 수 없으니 주의할 것! git restore {파일 이름} Staging Area 작업 단계 Staging Area에 반영된 파일을 Working Directory로 되돌리기 (== Unstage) git rm —cached (root-commit이 ..
[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)
·
Spring
1. XML스프링의 애플리케이션 컨텍스트는 XML에 담긴 DI 정보를 활용할 수 있습니다. DI 정보가 담긴 XML 파일은 를 루트 엘리먼트로 사용하고 안에는 여러 개의 을 정의할 수 있습니다. 태그에 사용되는 속성들속성 이름설명id빈 객체의 고유 이름으로, 빈 id를 이용해 빈에 접근합니다.name객체의 별칭입니다.class생성할 클래스입니다. 패키지 이름까지 입력해야 합니다.constructor-arg생성자를 이용해 값을 주입할 때 사용합니다.propertysetter를 이용해 값을 주입할 때 사용합니다.setter를 이용한 DI 기능PersonServicepublic interface PersonService { public void sayHello();}PersonServiceImplpub..
[Spring] Spring Framework, Spring Web MVC
·
Spring
Framework 웹 어플리케이션을 개발하기 위해서는 기본 기능과 많은 기능을 설계, 작성해야 합니다. (요청처리, 세션관리, 리소스 관리, 멀티 쓰레드 등) 하지만 기본적인 공통 구조(framework)를 제공한다면 개발자는 웹 어플리케이션 기능 자체 개발에만 신경 쓰면 되기 때문에 생산성이 높아집니다.. 개발자 입장에서는 완성된 구조에 자신이 맡은 코드만 개발해서 넣어주면 되기 때문에 개발 시간을 단축할 수 있습니다. Spring Framework의 특징 POJO(Plain Old Java Object) 방식의 프레임워크 - EJB가 기능 작성을 위해서 인터페이스를 구현하거나 상속하는 것에 비해 일반적인 자바 객체를 이용해서 그대로 사용할 수 있음을 의미합니다. 의존성 주입(DI, Dependency..
[Spring] SecurityConfig, OAuth2UserDetailsService 순환 참조 오류
·
Spring
오류Spring Security와 OAuth 2.0 프레임워크를 이용하여 소셜로그인을 구현하던 중 SecurityConfig 파일과 DefaultOAuth2UserService 클래스를 상속받은 OAuth2UserDetailsService 클래스 사이에서 순환 참조 오류가 발생했다.오류 원인SecurityConfig@Configuration@Log4j2@EnableWebSecurity@EnableGlobalMethodSecurity(securedEnabled = true)@RequiredArgsConstructorpublic class SecurityConfig { private final OAuth2UserDetailsService oAuth2UserDetailsService; private..
[DB] 트랜잭션과 격리 수준
·
DB
트랜잭션이란?트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러개의 연산이 수행될 수 있다. 그리고 트랜잭션은 아래 네 가지 원칙(ACID)가 반드시 지켜져야 한다.원자성 (Atomicity)처음에 언급했듯이 트랜잭션에는 여러개의 연산이 수행될 수 있는데 이 연산들이 모두 성공하거나 모두 실패해야 한다. 예를 들어 은행의 계좌 이체 서비스를 개발한다고 가정하면 하나의 계좌에서는 출금이 이루어져야 하고, 이체의 대상이 되는 계좌에는 입금이 동시에 일어나야 한다. 만약 출금에는 성공했는데 입금에는 실패한다면 결국 출금 계좌의 주인은 돈만 잃은 셈이 된다. 즉 한 트랜잭션 안에 있는 모든 연산이 성공했을때만 커밋(COMMIT)되어 데이터베이스에 영구히 ..
[JPA] N + 1 문제와 해결방법
·
JPA
N + 1 문제란?처음 조회한 데이터 수만큼 다시 SQL을 사용해서 연관 관계가 설정된 엔티티를 조회하는 것을 N + 1 문제라고 한다. N + 1 문제는 em.find() 메소드나 스프링 데이터 JPA의 findById() 메소드 같은 단건 조회 시에는 연관된 엔티티를 조인해서 한번에 조회해오기 때문에 문제가 되지 않지만 JPQL을 이용한 메소드를 호출할 때는 문제가 발생한다. N + 1 상황을 만들기 위해 아래와 같이 엔티티를 설정했다.Member 엔티티@Entity@Getter@Setter@NoArgsConstructorpublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; pr..