본문 바로가기

분류 전체보기

(106)
[Spring Security] 스프링 시큐리티란? 스프링 시큐리티에 대해서 알아보기 전 간단하게 개념 확인하겠습니다! 🎨 What is Servlet? 웹 기반의 요청에 대해 동적으로 처리해주는 역할입니다. 해당 URL에 기반한 HTTPservletRequest를 생성하고 response 결과를 전송합니다. request 객체에 있는 정보들을 꺼내서 사용, response 객체에 정보를 편리하게 입력 🎨 What is Servlet Container? 서블릿은 요청을 받거나 내보낼 때, 자신이 알아서 하는 것이 아니라 서블릿을 실행시키는 주체인 서블릿 컨테이너라는 것을 이용합니다. 즉, Servlet을 관리한다는 Servlet Container는 어떤 요청에 대해 어떤 Servlet을 실행할 것인지 제어하는 것이죠. 더 쉽게 말하면,, 서블릿이 웹서버와..
[JPA] JPA와 JPA의 필요성 💡 JPA(Java Persistence API) = 자바로 영속 영역을 처리하는 API JPA 상위 개념은 ORM(Object Relational Mapping)이라는 패러다임으로 이어짐 → 이는 객체 지향으로 구성한 시스템을 ⇒ 관계형 데이터베이스에 매핑하는 패러다임이다. JPA를 이용하는 개발의 핵심은 객체지향을 통해서 영속 계층을 처리하는 데 있음 → JPA를 이용할 때는 테이블과 SQL을 다루는 것이 아니라 ❌ 데이터에 해당하는 객체를 엔티티 객체라는 것으로 다루고 JPA로 이를 데이터베이스와 연동해서 관리한다. 💡 JPA의 필요성 객체와 관계형 데이터베이스의 차이연관관계 - 상속테이블은 외래 키를 사용: JOIN ON M.TEAM_ID = T.TEAM_ID 객체는 Member에서 Team으로는..
[2022] 회고록 | 개발 시작/이펍/라꾸라꾸 2022년은 나에게 큰 성장이 있었던 한 해였다. 커리어적인 분야, 학업 분야 사람과의 관계에서 다양한 경험이 있었고 이 경험으로 인해 울고 웃었다. 키워드 별로 간단하게 생각을 정리해보았다. 2022년의 키워드 = EFUB, 개발, 학교 1. EFUB(Ewha Frontend UXUI Backend) EFUB에 대한 자세한 내용은 아래 링크에 있습니다!😃 https://coding-with-the-lord-everyday.tistory.com/77 2. 개발 새로 시작한 것 = 스프링 공부, 깃허브 잔디 채우기, 티스토리 작성 [스프링 공부 시작] 이전에 웹 개발을 시작할 때 장고를 잠깐 한 적이 있다. 이때, 필자의 성격상 통제하는 것을 좋아하기 때문에 모든 것을 알아야 마음이 놓인다. 이에 따라 D..
2022 EUFB 2기 활동을 마치며. 2022년 가장 기억에 남는 일은 이펍에 합격했던 것이다. 비전공자에 뼈문과생, 그리고 화려한 스펙이 없는 상태에서 간절함과 열정으로 붙었다. 고학번이라 마지막 기회라고 생각하고 넣었다. 이 동아리를 붙기 위해 말그대로 ‘발악’을 한 것 같다. 다행히 이러한 열정이 닿아 동아리 부원으로 합격하게 되었다. 동아리 합격 후 다른 부원들을 보니 다 소프트웨어학부생이며 문과 비전공자는 나 하나뿐이었다. 그 순간 뿌듯함과 동시에 부담감이 느껴졌다. 문과 비전공자는 전공생보다 부족할 것이라는 인식을 깨야겠다는 생각이 들었다. 또한, 학과가 일반적인 문과 학과가 아닌 ‘기독교학과’라는 어쩌면 생소하고 특이한 학과인데 나의 행동과 성과가 그 학과를 대변하는 것 같아 더욱 책임감이 들었다. 그래서 더욱 노력해야 겠다고 ..
[보안] 패스워드 보안 지침 개발할 때 사용자의 패스워드를 어떻게 처리해야 할 지 고민이 되었다. 많은 서비스에서 영문, 숫자, 특수 기호를 조합하라는 조건을 본 것 같다. 더 구체적으로 직접 서비스를 개발할 때 어떤 조건을 주어야 하고 어떤 방식으로 저장해야할 지 고민이 되어(비밀번호를 그대로 저장하면 개발자들이 뭔짓을 할 수도 있지 않는가!) KISA의 안내 지침을 찾아서 작성해보았다. KISA에서 제공하는 "패스워드 선택 및 이용 안내서"에 따르면 1) 초기 패스워드, 패스워드 분실 등의 이유로 이용자에게 제공하기 위해 생성된 패스워드는 최소 6자 이상이어야하며 안전하게 생성된 난수여야 한다. -> 라꾸라꾸 프로젝트의 경우 다음과 같이 난수를 생성하여 사용자의 이메일로 전송하는 방법을 이용했다. public String get..
빈 생명주기 콜백 빈 생명주기 콜백 시작 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.(안전하게 종료 처리시키는 것이 필요하다) (참고 : 마치 TCP/IP 연결할 때 오래 걸리니까 미리 DB 와 연결해놓는 데이터베이스 커넥션 풀과 같은 개념이라고 생각하면 된다.) [예제] 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. (서버가 뜰 때 미리 외부 네트워크에 연결) 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 했다. 이 NetworkClient 는 애플리케이션 시작 시점에 connect() 를 호출 -> 연결을 맺어두어야 하고, 애플리케이션이 종료되면 disCon..
같은 타입인 여러 개의 빈들을 조회하고 싶을 때 조회한 빈이 모두 필요할 때 의도적으로 정말 해당 타입의 스프링 빈이 다 필요한 경우도 있다. 예를 들어서 할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate - 비율로 할인, fix - 고정금액 할인)를 선택할 수 있다고 가정해보자. 스프링을 사용하면 소위 말하는 전략 패턴을 매우 간단하게 구현할 수 있다. package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; //import org.junit.jupiter.api.Assertio..
Lombok 라이브러리의 @RequiredArgsConstructor 롬복과 최신 트랜드 막상 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 필드에 final 키워드를 사용하게 된다. 그런데 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야 하고...(매우 귀찮다) 필드 주입처럼 좀 편리하게 사용하는 방법은 없을까? -> 롬복으로 해결 가능하다! [롬복 추가] 프로젝트 시작할 때 롬복을 설치하지 않았기 때문에 build.gradle에 다음과 같은 코드를 추가하자(처음에 롬복을 추가했으면 이 과정을 뛰어넘어도 된다) //lombok 설정 추가 configurations{ compileOnly{ extendsFrom annotationProcessor } } dependencies { implementation 'org.springframework..
의존관계 주입 4가지 방법과 생성자 주입 권장 이유 다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. (1) 생성자 주입 (2) 수정자 주입(setter 주입) (3) 필드 주입 (4) 일반 메서드 주입 [1] 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다. 지금까지 우리가 진행했던 방법이 바로 생성자 주입이다. private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memb..
예외 처리(@ExceptionHandler) - 예시 코드를 중심으로 스프링에서 예외 처리하는 3가지 방법 1. try - catch “각 메소드” 안에서 처리 2. 어노테이션 @ExceptionHandler -> 이 방법을 적용하여 설명 예정 “컨트롤러 자체”에서 처리 @controller, @RestController가 적용된 Bean 내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능 Controller 내부에서 호출한 Service에서 예외가 발생 시 에러 처리 대상이 된다. 예외 처리 메시지를 예외 발생마다 새롭게 작성하면 번거롭고 복잡하다ㅜ 이젠 한 번에 처리해보자! 3. Global level에서 처리 → 추천 클라이언트에서 전달되기 직전에 처리 [ 실행흐름 ] [컨트롤러에서 예외 발생] 에러가 터지면 Dispatcher Servlet을 통해 Ex..