Spring/Java(10)
-
[JDK 뜯어보기] Collection interface
본 글은 JDK 17을 기준으로 작성하였습니다.java.util.CollectionCollection은 그 안에 있는 요소들을 나타낸다. 인터페이스이기 때문에 JDK는 직접적인 구현체를 제공하지는 않지만, Set, List 와 같은 더 구체적인 하위 인터페이스의 구현체들로 구현체를 제공한다. Unmodifiable CollectionUnmodifiable Collection 이라고 해서 반드시 불변인 것은 아니다. 포함되어 있는 요소가 가변적이라면 컬렉션이 가변적일 수 있다. 하지만 모든 요소가 불변이라면 불변 Collection이라고 생각할 수 있다.Collections.unmodifiableList() 우테코 프리코스를 경험하며 위의 메소드를 이용하여 불변 Collection으로 만드려는 것을 많이 ..
2024.04.29 -
[JPA] ORM과 JPA 이해하기
1. 서론 Spring Framework의 많은 프로젝트를 보면 많은 사람들이 JPA라는 기술을 사용한다. 오늘은 이 JPA라는 기술에 대해 설명해보고자 한다. 2. ORM JPA를 알기 위해서 우선 ORM 이라는 것에 대해 알아보자. ORM 이란 Object-Relational Mapping의 약자이다. ORM은 SQL을 사용하지 않고 데이터베이스를 관리할 수 있는 도구이다. 데이터베이스에 테이블을 만들고 CRUD 기능을 사용하기 위해서는 SQL 쿼리를 데이터베이스 서버에 전달해야 한다. 하지만 코드만으로 이런 SQL 쿼리를 대신할 수 있도록 도와주는 것이 ORM이다. 예를 들어보면 User라는 테이블에 id, name, age라는 열이 있다고 가정하자. id name age 1 금장 26 2 준범 2..
2024.03.15 -
스프링 시큐리티 없이 JWT 회원가입 및 로그인 구현
스프링 시큐리티 없이 JWT를 이용한 회원가입 및 로그인 구현을 정리하고자 한다. 시큐리티를 쓰지 않는 이유는 시큐리티 자체가 너무 많은 역할을 해주기 때문에 직접 구현하며 어떤 식으로 진행되는지 확인하고자 함이다. 물론 내가 진행한 프로젝트 내에서 스프링 시큐리티를 아예 쓰지 않는 것은 아니지만 JWT 인증에 한해서는 사용하지 않는다. 0. JWT 에 관해 이 글을 읽기 전 JWT에 관한 이해가 필요하다. 앞선 글을 읽고 오길 바란다. 2024.02.23 - [Web] - JWT(Json Web Token) 이란 무엇인가? - 쿠키와 세션 비교를 통해 1. dependency 설치 implementation 'io.jsonwebtoken:jjwt-api:0.12.3' implementation 'io...
2024.03.08 -
싱글톤 컨테이너
웹 어플리케이션과 싱글톤 웹 어플리케이션은 수 많은 사람들이 동시에 요청을 보낸다. 하지만 요청 하나 하나 마다 객체를 만든다면 메모리가 당연히 과부하가 올 것이다. 예를 들어 100만명의 고객이 초당 요청을 하나씩 보낸다 생각하면 초당 객체가 100만개가 생성되고 소멸된다. 그림으로 보면 다음과 같을 것이다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 1. 조회 : 호출할 때마다 객체 생성 MemberService memberService1 = appConfig.memberService(); // 2. 조회 : 호출할 때마다 객체 생성 MemberServic..
2023.05.12 -
스프링 입문 - 05. 회원 관리 예제 (웹 MVC 개발)
회원 가입, 회원 조회를 웹에서 볼 수 있도록 만들고자 한다. 홈 화면 추가 HomeController package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } 이전에 @GetMapping("/")이 localhost:8080의 주소를 가리킨다. 하지만 예전에 static 안에 index.html로 연결되는 welcome p..
2023.04.24 -
스프링 입문 - 04. 스프링 빈과 의존관계
Dependency Injection (DI) DI란 번역 그대로 의존관계 주입이라는 뜻이다. 객체의 의존관계를 외부에서 넣어주는 것이다. Controller 가 Service와 Repository를 사용할 수 있게 의존관계를 만들어주자. public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); 기존 Service에서는 Repository를 이용하기 위해 new라는 키워드를 이용해 새로운 객체를 만들어 주었다. 이 코드를 DI를 적용해서 변경하면 아래와 같다. public class MemberService { private final MemberRepository m..
2023.04.23 -
Java Collection Framework
Collection Framework 자바는 여러 객체를 그룹으로 만들고 추가, 삭제, 검색 등의 조작을 효율적으로 사용할 수 있는 interface와 class 들을 java.util 패키지에서 제공한다. 이들을 총칭해서 Collection Framework라고 한다. Collection Framework의 구조 Collection Framework 에는 크게 List, Set, Map이 있다. Map의 경우 Collection interface를 상속하지는 않지만 그래도 Collection Framework으로 분류된다. 위의 그림에서 초록색 박스는 Interface, 주황색 박스는 Class이다. 물론 그림에 있는 게 다는 아니지만 많이 사용하는 것 위주로 적어보았다. 이 글에서는 대략적인 특징만..
2023.04.19 -
스프링 입문 - 03. 회원 관리 예제
일반적인 웹 어플리케이션 계층 구조 Controller : 웹 MVC의 컨트롤러, 클라이언트로부터 들어온 HTTP request를 처리하고 HTTP Response를 반환한다. Service : 핵심 비즈니스 로직 구현 Repository : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 Domain : 비즈니스 도메인 객체 회원 관리 비즈니스 요구사항 데이터 : 회원 ID, 이름 기능 : 회원가입, 조회(ID / 이름 별로) DB 저장소는 구현체로 메모리 기반 데이터 저장소 사용 회원 Domain package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getI..
2023.04.18 -
스프링 입문 - 02. 스프링 웹 개발 기초
thymeleaf 템플릿 엔진 작동 확인 // java/hello/hellospring/controller/HelloController.java @Controller public class HelloController { @GetMapping("hello") public String hello(Model model){ model.addAttribute("data", "hello!!"); return "hello"; } 안녕하세요. 손님 @Controller Controller class 에는 @Controller 어노테이션을 적어 준다. 이는 Spring Bean으로 등록시켜 주고 Controller 클래스라고 쉽게 알 수 있게 해 준다. @GetMapping Controller 내 HTTP GET r..
2023.04.16 -
Spring Initializer를 이용한 Spring Boot 환경설정
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 김영한 님의 스프링 입문 강의를 보며 공부한 내용을 정리해보고자 한다. Spring Boot를 기반으로 진행되는 강의이다. Spring Initializer Spring Boot를 이용한 초기 설정을 위해서는 https://start.spring.io/라는 페이지를 이용한다. Gradle / Maven, Language, Spring boot version, dependency..
2023.04.16