[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
백엔드 개발에서 초기 데이터를 설정할 때, 하드코딩으로 값을 입력하는 경우가 많습니다. 하지만 데이터가 많아질수록 코드가 복잡해지고 관리가 어려워지죠. 이번 포스팅에서는 하드코딩 대신 CSV 파일을 활용하여 데이터를 초기화하는 방법과, 그 과정에서 발생한 문제를 어떻게 해결했는지 소개합니다. 1. 하드코딩 방식의 문제점처음에는 아래와 같이 데이터를 직접 코드에 하드코딩하여 초기화했습니다.@Component@Order(1)public class TestDataRunner implements ApplicationRunner { @Autowired ProductRepository productRepository; @Override public void run(ApplicationArgum..
[HTTP] 웹 통신 흐름
·
네트워크
웹 브라우저에 11st.co.kr 를 입력 했을 때 어떤 일이 일어날까?IP 주소란?IP 주소는 서버에 접근하기 위해 필요한 고유한 주소입니다. 예를 들어, 11st.co.kr의 서버에 접근하려면 그 서버의 IP 주소(예: 203.238.182.128)를 알아야 합니다. 하지만 이런 숫자 조합을 기억하기는 어렵습니다. 그래서 등장한 것이 DNS(Domain Name System)입니다. DNS 란?DNS는 사람이 읽기 쉬운 도메인 이름(11st.co.kr)을 컴퓨터가 이해할 수 있는 IP 주소로 변환해 주는 시스템입니다. 반대로 IP 주소를 도메인 이름으로 변환할 수도 있습니다. 웹 브라우저에 11st.co.kr를 입력 했을 때 일어나는 일웹 브라우저에서 도메인 네임(11st.co.kr)을 입력한다. (..
[HTTP] 세션과 토큰
·
네트워크
최근 프로젝트에서 소셜 로그인 기능을 구현하게 되었습니다. 예전부터 관심이 있었던 주제였던 만큼 큰 동기부여가 되었고, 이를 바탕으로 이번 글을 작성해 봅니다. 먼저, 로그인 구현 방식의 주요한 두 가지 방법인 세션과 토큰의 차이를 살펴보고, 왜 이번 프로젝트에서는 JWT 토큰을 선택했는지 이야기해 보겠습니다.세션과 토큰먼저 http는 상태를 저장하지 않습니다. 이를 Stateless하다고 표현하는데 이러한 http의 특성은 서버의 수평적인 확장을 가능하게 하여 서버를 증설할 때 유리하게 작용합니다. 하지만 그렇다고 모든 기능을 Stateless하게 설계할 수는 없는데 예를 들어 로그인한 유저의 정보를 가져오기 위해서 상태유지가 꼭 필요한 로그인 기능이 대표적입니다. 그래서 일반적으로 사용자 정보가 담긴..