몰입하며 나아가는 개발이란

분류 전체보기 64

Bean scope

Bean scope Bean Life Cycle Bean Life Cycle은 기본적으로 생성, 의존 설정, 초기화, 소멸의 단계를 갖는다. 하지만 어떤 컨테이너를 사용하느냐 에 따라 차이가 있으며 Bean Factory는 기본적인 의존성 주입을 지원하는 가장 간단한 형태의 컨테이너이고, getBean() 메서드가 호출될 때까지 Bean의 생성을 미루게 구성 되어있다. Application Context는 BeanFactory를 상속한 형태로 BeanFactory의 모든 기능을 가지며 추가적인 기능을 가지는 컨테이너 이고 Application context는 context가 시작하기 전에 모든 Bean을 생성하고 로딩해서, 원하는 시기에 언제든지 가져다가 쓸 수 있다. 빈 스코프 Spring에서 별도의 ..

Language/Java 2022.05.21

Exception 처리 방법

Exception 예외 처리 방법 3가지 예외란? 예외는 개발자가 구현한 logic에서 발생하므로 예외는 발생할 상황을 미리 예측하여 처리할 수 있다. 즉, 예외는 개발자가 처리할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확히 알고 적용하는 것이 중요하다. 예외 복구 예외 복구의 핵심은 예외가 발생하여도 애플리케이션은 정상적인 흐름으로 진행되는 것이다. 예외가 발생하면 그 예외를 잡아서 일정 시간만큼 대기하고 다시 재시도를 반복하게 된다. 그리고 최대 재시도 횟수를 넘기면 또 다른 예외를 발생 시킨다. int maxretry = MAX_RETRY; while(maxretry --> 0){ try{ // 시도 return; }catch(Exception e){ // 로그출력 및 정해진 시간..

시간복잡도, Time Complexity, Big-O

Time Complexity(시간 복잡도)를 표기하는 방법 Big-O → 상한점근 Big-Ω → 하한점근 Big-θ → 평균 시간 복잡도를 표기하는 3가지 방법이 있으며, 위부터 차례대로 최악의 경우, 최선의 경우, 평균의 경우에 대하여 나타내는 방법이다. 그중에서 Big-O 표기법은 최악의 경우를 고려하는 표기법 이므로 “이 정도 시간까지 걸릴 수 있다”를 명시적으로 보여주기에 그에 맞는 대응을 고려할 수 있게 해준다. Big-O Constant complexity - O(1) “일정한 복잡도”라고 하며, 입력 값 이 증가하더라도 시간이 늘어나지 않는다. 즉, 입력 값의 크기가 아무리 커져도 즉시 출력 값을 얻어낼 수 있다. function constantComplexity(arr, index){ re..

OSIV란?

OSIV Open-Session-In-View OSIV? OEIV? JPA에서는 Open EntityManager In View, OEIV 라고하며, 하이버네이트에서는 OSIV라고 부르지만 같은 기능이다. OSIV 전략은 트랜잭션 시작시 최초 데이터베이스 커넥션 시작 시점부터 API응답이 끝날 때(View) 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 즉, View 레이어에서도 지연로딩을 사용할 수 있다. 스프링이 제공하는 OSIV는 서블릿 또는 인터셉터에서 적용이 가능하며, OSIV사용시 영속성 컨텍스트는 View 레이어까지 지속되지만 영속상태의 객체를 수정할경우에는 트랜잭션 안에서만 가능하다. OSIV 사용시 spring.jpa.open-in-view = true 설정후 어플리케이션을 구동..

Framework/JPA 2022.05.03

Spring Data JPA

Spring Data JPA 스프링 데이터 JPA JavaConfig 설정 @Configuration @EnableJpaRepositories(basePackages = "exmaple.project.repository") Spring Boot 사용시 생략가능. (@SpringBootApplication 해당패키지와 하위 패키지에서 자동으로 인식함.) 스프링 데이터 JPA 기반 Repository import org.springframework.data.jpa.repository.JpaRepository; public interface MemberRepository extends JpaRepository { } JpaRepository 인터페이스는 제네릭은 으로 설정 할 수 있다. 공통 CRUD를 제공한..

Framework/JPA 2022.05.02

Entity, DTO, VO개념

Entity, DTO, VO Entity 란? Entity Class는 실제 DB테이블과 매핑되는 핵심 클래스로 DB테이블에 존재하는 컬럼들을 필드로 갖는 객체이다. 즉, DataBase Table과 1:1로 Mapping 되어지는 Class 이다. Entity Class는 상속을 받거나 Interface여서는 안되며 DataBase Table에 존재하지 않는 Column을 가져서도 안된다. 따라서 Persistent(영속성) 목적으로 사용되는 객체이므로 Request나 Response 값을 전달하는 객체로써 사용하는것은 옳지 못한 사용방법이다.(Setter 메서드는 최대한 배제하고 Constructor로 사용을 권장 한다.) @Entity @Table(name = "orders") @Getter @Se..

ORM이란?

ORM이란? Object Relational Mapping ORM은 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP에서 쓰이는 객체라는 개념을 구현한 ㅋ르래스와 RDB 에서 쓰이는 데이터인 테이블을 자동으로 매핑 하는것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통행 객체간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.

도메인 주도 설계란?(DDD)

도메인 주도 설계란?(DDD) Domain-Driven Design 도메인 주도 디자인이란 도메인이 중심이 되는 개발 방식을 말하며, 요구 사항을 모으는 것부터 low_level 디자인까지 소프트웨어 개발의 라이프사이클 전체를 포함하는 방법론 이라고 할 수 있습니다. DDD의 목적은 소프트웨어의 연관된 부분들을 연결하여 계속 해서 진화하는 모델을 만들어 나가 복잡한 어플리케이션을 쉽게 만들어 가는 것에 있습니다. 즉, Loose Coupling과 High Cohesion으로 보다 가벼운 설계로 소프트웨어의 위기와 커뮤니케이션 문제를 해결하기 위해 탄생하였습니다. DDD는 크게 Strategic Design과 Tactical Design으로 단계가 나뉘며, -Strategic Design에서는 Contex..

HTTP 란?

HTTP 란? Hyper Text Transfer Protocol의 약자이며, 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 통신 규약이다. 서버간 네트워크 통신시 어떠한 형식으로 통신할지에 대해 정해둔 규약. HTTP Request 예시 HTTP Response 예시 HTTP 기본구조 start line - 시작 라인 header - 헤더 empty line - 공백 라인 (CRLF) message body - 메세지 본문 HTTP Request 구조 ![http req](C:\Users\READERSTECH_LAB05\Desktop\sample_image\http req.png) start line ![http req start line](C:\Users\READERSTECH_LAB05\Des..

Infrastructure/WAS 2022.04.05

Spring Security

Spring Security 스프링 시큐리티(Spring Security)란? 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크 입니다. 스프링 시큐리티에서는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있습니다. 필터(Filter)란? Http 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며, 서블릿 2.3규약에서 새롭게 추가되었습니다. 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청과 최종자원(서블릿/JSP/기타) 사이에 위치하여 클라이언트의 요청 정보를 알맞게 변경할 수 있으며, 또한 필터는 최종 자원과 클라이언트로 가는 응답 사이에 위치하여..

Framework 2022.04.04