| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- json
- vscode
- 단위테스트
- junit5
- IntelliJ
- math
- 자바
- HashMap
- 자바문법
- Visual Studio Code
- CSS
- ArrayList
- junit
- 배열
- 정규식
- Array
- js
- string
- Java
- input
- Eclipse
- list
- 문자열
- 테스트자동화
- 이클립스
- html
- javascript
- 자바스크립트
- java테스트
- 인텔리제이
- Today
- Total
목록IT/SpringBoot (22)
어제 오늘 내일
개념은 잡았으니 이제 진짜 코드를 만져봅시다.Spring Security를 프로젝트에 추가하는 순간, 마법처럼 모든 페이지가 잠기게 됩니다.이번 포스팅에서는 라이브러리 추가, 설정 클래스(SecurityConfig) 만들기, 그리고 비밀번호 암호화(BCrypt)까지 진행합니다.Step 1. 의존성 추가 (build.gradle)가장 먼저 build.gradle에 시큐리티 의존성을 추가합니다.dependencies { // ... 기존 의존성 ... implementation 'org.springframework.boot:spring-boot-starter-security'}(추가 후 코끼리 아이콘(Load Gradle Changes) 클릭 필수!) 🖐 잠깐! 무슨 일이 일어난 거죠?의존성만 ..
스프링을 공부하는 많은 분들이 "가장 큰 통곡의 벽"으로 꼽는 것이 바로 Spring Security입니다.설정할 것도 많고, 용어도 어렵죠 (Principal? GrantedAuthority? FilterChain?).하지만 한 번 이해하고 나면 이만큼 든든한 보디가드도 없습니다.오늘은 복잡한 코드를 짜기 전에, Spring Security가 왜 필요하고 어떻게 작동하는지 아주 쉽게 개념부터 잡아보겠습니다.1. Spring Security, 왜 쓸까?만약 시큐리티 없이 우리가 직접 로그인과 권한 체크를 구현한다면 어떻게 될까요?아마 모든 Controller 메소드마다 이런 코드를 넣어야 할 겁니다.// 시큐리티가 없다면... (끔찍한 상황)@GetMapping("/admin/members")public..
수정과 삭제 기능은 보통 하나의 화면(posts-update.html)에서 같이 처리합니다.먼저 백엔드에 삭제 기능이 빠져있었으니(9편에서 생략함), 그것부터 채워 넣고 화면을 만들겠습니다.Step 1. 백엔드에 '삭제' 기능 추가하기9편에서 등록, 수정, 조회 API는 만들었는데 삭제(Delete) API는 아직 안 만들었습니다. 빠르게 추가합시다.1. Service (BoardService.java)// ... 기존 코드 ... // 삭제 기능 추가 @Transactional public void delete(Long id) { Board board = boardRepository.findById(id) .orElseThrow(() -> new ..
메인 화면에 있는 "글 등록" 버튼을 눌렀을 때 이동할 입력 화면을 만들고,자바스크립트(JS)를 이용해 기존에 만들어둔 API에 데이터를 전송하는 과정을 구현합니다.HTML form 태그의 기본 submit 기능을 쓰지 않고, 자바스크립트(JS)를 이용해 API를 호출하는 방식을 사용합니다.이유는 우리가 만든 컨트롤러가 REST Controller(JSON 데이터를 받음)이기 때문입니다.Step 1. 페이지 이동 컨트롤러 추가"글 등록" 버튼을 눌렀을 때, 등록 화면(posts-save.html)을 보여주도록 컨트롤러에 메소드를 추가합니다.위치: src/main/java/com/example/board/controller/IndexController.java// ... 기존 코드 ...@RequiredA..
지금까지 만든 것은 데이터를 주고받는 API(서버)였습니다. 이제 사용자가 브라우저에서 볼 수 있는 화면(View)을 만들어 이 API와 연결해 보겠습니다.우리는 SSR(Server Side Rendering) 방식인 Thymeleaf를 사용합니다.Step 1. 의존성 확인 (build.gradle)프로젝트 생성 시 추가했을 수도 있지만, 혹시 모르니 build.gradle에 타임리프가 있는지 확인합니다. 없다면 추가하고 Load Gradle Changes를 눌러주세요.dependencies { // ... 기존 의존성 ... implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'}Step 2. 전체 조회 쿼리 추가 (R..
개발을 하다 보면 테이블마다 공통적으로 들어가는 컬럼이 있습니다.바로 생성 시간(CreatedDate)과 수정 시간(ModifiedDate)입니다.이걸 매번 수동으로 넣는 것은 비효율적입니다.Spring Data JPA에서는 이 시간을 자동으로 넣어주는 Auditing 기능을 제공합니다.이번 포스팅에서는 BaseTimeEntity를 만들어 모든 Entity의 상위 클래스로 적용하는 방법을 소개합니다.Step 1. BaseTimeEntity 만들기모든 Entity의 상위 클래스가 될 추상 클래스를 만듭니다. Board 뿐만 아니라 나중에 Member, Comment 등을 만들 때도 이 클래스만 상속받으면 시간이 자동으로 관리됩니다.위치: src/main/java/com/example/board/domain..
지난 시간까지 프로젝트 환경 설정을 모두 마쳤습니다. 이제 드디어 게시판의 핵심 기능을 구현할 차례입니다.개발 용어로는 CRUD라고 하는데요, 각각 Create(생성), Read(조회), Update(수정), Delete(삭제)를 의미합니다. Spring Boot와 JPA를 사용하면 복잡한 SQL 쿼리 없이도 이 기능들을 아주 쉽고 빠르게 구현할 수 있습니다.이번 포스팅에서는 화면(HTML)을 만들기 전에, 데이터를 처리하는 API 서버 역할을 먼저 완성해 보겠습니다.📂 패키지 구조 잡기코드를 작성하기 전, com.example.board 패키지 아래에 다음과 같이 패키지를 미리 나누어 두면 관리가 편합니다.domain.entity : DB 테이블과 매핑되는 클래스domain.repository : D..
지난 시간까지 만든 Hello World는 치명적인 단점이 있습니다.서버를 껐다 켜면 데이터가 다 사라진다는 거죠. (휘발성)데이터를 영구적으로 저장하려면 데이터베이스(DB)가 필요합니다."아, 오라클이나 MySQL 설치해야 하나요? 너무 무거운데..."걱정 마세요. 우리는 H2라는 아주 가볍고 똑똑한 DB를 사용할 겁니다.1. 라이브러리 추가하기 (build.gradle)우리가 처음 프로젝트를 만들 때 '웹(Web)' 기능만 넣었기 때문에, DB를 쓰려면 재료(라이브러리)를 추가해야 합니다.IntelliJ에서 build.gradle 파일을 엽니다.dependencies { ... } 중괄호 안에 아래 두 줄을 복사해서 붙여넣으세요.dependencies { // ... 기존에 있던 implemen..
안녕하세요! 지난 시간까지 이론 공부하느라 고생 많으셨습니다.드디어 오늘, 내 컴퓨터에서 스프링 부트를 실제로 돌려보는 날입니다.보통 프로그래밍을 시작할 때 "환경 설정하다가 지쳐서 포기한다"는 말이 있죠?오늘은 복잡한 건 다 건너뛰고, 가장 빠르고 확실한 방법으로 'Hello World'를 띄워보겠습니다. 딱 5분만 집중해 주세요! 1. 준비물 챙기기요리를 하려면 칼과 도마가 필요하듯, 개발에도 도구가 필요합니다. 딱 두 가지만 설치해 주세요. (이미 있다면 패스!)JDK 17 (Java Development Kit)스프링 부트 3.0 이상을 쓰려면 자바 17 버전 이상이 필수입니다.구글에 'JDK 17 설치'를 검색해서 설치해 주세요. (Oracle 또는 OpenJDK 무관)IntelliJ IDEA ..
스프링 부트 코드를 보면 자바 문법에는 없는 @ 표시가 정말 많이 나옵니다.이걸 '어노테이션(Annotation)'이라고 부르는데요.사전적 의미로는 '주석'이지만, 스프링에서는 '스티커(명찰)'라고 생각하면 이해가 빠릅니다. 1. 어노테이션 = "스프링에게 보내는 편지"우리가 클래스 위에 @Controller라고 붙이는 건, 스프링에게 이런 메모를 남기는 것과 같습니다."스프링아, 이 클래스는 그냥 평범한 자바 파일이 아니야. 내가 '컨트롤러' 역할을 맡겼으니까 네가 알아서 관리해 줘!"이 스티커가 안 붙어 있으면 스프링은 "얘는 뭐 하는 애인지 모르겠네?" 하고 무시해 버립니다.그래서 적절한 스티커를 딱딱 붙여주는 게 개발자의 역할입니다.2. 역할 부여 스티커 (3계층 구조)지난 시간에 배운 '레스토랑..
