[Spring] AOP
·
Spring
AOP 란?AOP(Aspect-Oriented Programming)는 관점 지향 프로그래밍이라는 의미로 번역되는데, 객체지향에서 특정 비즈니스 로직에 걸림돌이 되는 공통 로직을 제거할 수 있는 방법을 제공해줍니다. AOP를 적용하면 기존의 코드에 첨삭 없이, 메서드의 호출 이전 혹은 이후에 필요한 로직을 수행하는 방법을 제공합니다. 정리하면 AOP가 추구하는 것은 관심사의 분리로 개발자가 염두에 두어야 하는 일들은 별도의 관심사로 분리하고 핵심 배즈니스 로직만을 작성하는 것을 권장합니다.AOP 용어용어설명aspect구현하고자 하는 보조 기능adviceaspect의 실제 구현체(클래스). 메서드 호출을 기준으로 여러 지점에서 실행joinpointadvice를 적용하는 지점을 의미. 스프링은 method ..
[Spring] 제어의 역전(IoC)와 의존성 주입(DI)
·
Spring
제어의 역전(Inversion of Control)이란프로그램의 제어 흐름 구조가 뒤바뀌는 것일반적으로 프로그램의 흐름은 아래의 과정이 반복되는데 제어의 역전은 이런 제어 흐름의 개념을 거꾸로 뒤집는다. 즉 프로그램의 제어권이 개발자가 아닌 프레임워크에게 있는 것을 의미한다.1. 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정 2. 결정한 오브젝트를 생성 3. 만들어진 오브젝트에 있는 메소드를 호출 4. 그 오브젝트 메소드 안에서 다음에 사용할 것을 결정하고 호출의존성 주입(Dependency Injection)이란스프링 IoC 기능의 대표적인 동작원리로 제어의 역전(IoC)는 이 DI를 통해서 일어난다.객체를 직접 생성하지 않고 외부에서 생성하여 주입시켜주는 방식의존성 주입을 이용하면 주입받..
[Java] 이것이 자바다 - IO 패키지
·
Java
IO 패키지란?프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번히 일어나는데 자바의 기본적인 데이터 입출력 API는 java.io 패키지에서 제공하고 있다. 이때 프로그램이 출발지냐 또는 도착지냐에 따라서 입출력 스트림의 종류가 결정되는데 프로그램이 데이터를 입력받을 때는 입력 스트림이라고 부르고 프로그램이 데이터를 보낼 때에는 출력 스트림이라고 부른다. java.io 패키지에서 제공하는 스트림의 종류는 크게 두 가지로 구분된다. 하나는 바이트 기반 스트림이고 다른하나는 문자 기반 스트림이다. 바이트 기반 스트림은 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 주고 받을 수 있으나 문자 기반 스트림은 오로지 문자만 주고 받을 수 있다. 바이트 기반 스트림과 문자 기반 스트림은 최..
[Java] 이것이 자바다 - 멀티 프로세스, 멀티 스레드
·
Java
운영체제운영체제란 하드웨어와 소프트웨어를 관리하는 일꾼으로 아래와 같은 역할을 한다.CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리메모리 관리 : 한정된 메모리를 어떤 프로세스에 얼마큼 할당해야 하는지 관리디스크 파일 관리 : 디스크 파일을 어떠한 방법으로 보관할지 관리I/O 디바이스 관리 : 마우스, 키보드 같은 I/O 디바이스들과 컴퓨터 간에 데이터를 주고받는 것을 관리 멀티 프로세스란?사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 부른다. 멀티 프로세스는 애플리케이션 단위의 멀티 태스킹을 의미한다...
[JPA] LazyInitializationException
·
JPA
개인 프로젝트로 e-commerce 서비스를 개발하던 중 LazyInitializationException 에러가 발생하였다.LazyInitializationException 발생 이유서비스단에서 @Transactional을 선언한 method가 종료되면 트랜잭션을 커밋한 후 트랜잭션과 영속성 컨텍스트가 종료된다. 영속성 컨텍스트가 종료되었으므로 조회한 엔티티가 준영속 상태가 되었고 그렇기 때문에 더이상 영속성 컨텍스트의 특징 중 하나인 지연로딩을 사용할 수 없다. 이때 컨트롤러단에서 FetchType.LAZY로 매핑된 테이블을 조회해오면 LazyInitializationException이 발생한다.LazyInitializationException 해결 과정영속성 컨텍스트가 닫히기 전 서비스단에서 모든 ..
[Java] CSV 파일 데이터 불러오기
·
Java
과제 수행 중 데이터를 입력하는 과정에서 다음과 같이 하드코딩으로 데이터를 입력했다. @Component @Order(1) public class TestDataRunner implements ApplicationRunner { @Autowired ProductRepository productRepository; @Override public void run(ApplicationArguments args) throws Exception { Product product1 = createProduct((long) 768848, "[STANLEY] GO CERAMIVAC 진공 텀블러/보틀 3종", 21000, 45); Product product2 = createProduct((long) 748943, "디오..
[HTTP] 웹 통신 흐름
·
네트워크
웹 브라우저에 11st.co.kr 를 입력 했을 때 어떤 일이 일어날까? IP 주소란?IP 주소란 쉽게 말해서 서버에 접근하기 위해 필요한 주소로 0.0.0.0부터 255.255.255.255로 이루어진 최대 12자리 숫자인데 서버에 접근 하기 위해 이 주소를 외우고 다니는 것은 쉬운 일이 아니다. 그래서 필요한것이 DNS이다.DNS 란?DNS란 Domain Name System을 지칭 하는 약어로 외우기 힘든 IP 주소를 비교적 외우기 쉬운 도메인 네임으로 변환해 주거나 반대의 변환을 수행해 주는 시스템이다.웹 브라우저에 11st.co.kr를 입력 했을 때 일어나는 일웹 브라우저에서 도메인 네임(11st.co.kr)을 입력한다. (1)DNS 서버에서 브라우저가 입력한 URL에 포함된 도메인 네임과 매핑..
[HTTP] 세션과 토큰
·
네트워크
실전 프로젝트에서 Jwt 토큰을 이용한 소셜 로그인 기능을 맡아서 구현하게 되었는데 예전부터 꼭 한번 다뤄보고 싶은 부분이었어서 아직 많이 부족하지만 이번에 한번 글을 써보려고 합니다. 로그인 기능을 어떻게 구현을 했는지 설명하기 전에 먼저 세션과 토큰의 차이점을 알아보고 왜 토큰을 사용하여 로그인 기능을 구현했는지 알아 보겠습니다.세션과 토큰먼저 http는 상태를 저장하지 않습니다. 이를 Stateless하다고 표현하는데 이러한 http의 특성은 서버의 수평적인 확장을 가능하게 하여 서버를 증설할 때 유리하게 작용합니다. 하지만 그렇다고 모든 기능을 Stateless하게 설계할 수는 없는데 예를 들어 로그인한 유저의 정보를 가져오기 위해서 상태유지가 꼭 필요한 로그인 기능이 대표적입니다. 그래서 일반적..