| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 스프링부트
- string
- list
- CSS
- 문자열
- Eclipse
- javascript
- 인텔리제이
- html
- junit5
- Array
- SpringBoot
- 자바
- 자바스크립트
- 자바문법
- java테스트
- 테스트자동화
- vscode
- Visual Studio Code
- input
- HashMap
- js
- 단위테스트
- ArrayList
- IntelliJ
- Java
- junit
- math
- 배열
- 정규식
- Today
- Total
목록2026/02 (55)
어제 오늘 내일
지금까지는 서버가 켜질 때 자동으로 생성되는 admin 계정만 사용했습니다.이번 5편에서는 사용자가 직접 아이디와 비밀번호를 입력해 가입하고, 그 비밀번호를 안전하게 암호화하여 DB에 저장하는 기능을 구현합니다.특히 마지막에는 DB를 직접 조회해서 비밀번호가 정말 암호화되었는지 확인해보겠습니다.Step 1. SecurityConfig 수정 (H2 Console 허용)나중에 DB에 데이터가 잘 들어갔는지 확인하려면 H2 Console(localhost:8080/h2-console)에 접속해야 합니다. 하지만 시큐리티는 기본적으로 이 경로도 막아버립니다.접속을 허용하고, 화면이 깨지지 않도록 설정을 추가하겠습니다.위치: src/main/java/com/example/board/config/SecurityCo..
네, 3편까지 잘 따라오셨습니다!이제 기능은 다 갖췄으니 "사용자에게 보이는 화면"을 다듬을 차례입니다.개발자인 우리 눈에는 기본 로그인 화면도 나쁘지 않지만, 실제 서비스라면 우리 서비스만의 디자인이 적용된 로그인 페이지가 필수겠죠?이번 4편에서는 Thymeleaf와 Bootstrap을 이용해 예쁜 로그인 화면을 만들고, 로그인 상태에 따라 버튼이 바뀌는(로그인 vs 로그아웃) 기능을 구현해 보겠습니다.Step 1. 로그인 화면 만들기 (login.html)먼저 templates 폴더에 로그인 HTML 파일을 만듭니다.여기서 가장 중요한 건 태그의 name 속성입니다. 시큐리티는 기본적으로 username과 password라는 이름을 찾기 때문입니다.위치: src/main/resources/templ..
자바 개발을 하다 보면 final static String... 처럼 상수를 정의해서 쓰는 경우가 많습니다. 하지만 단순히 값을 나열하는 것보다 Enum(열거형)을 사용하면 코드의 안전성과 가독성을 획기적으로 높일 수 있습니다.오늘은 자바 Enum을 단순한 목록이 아닌, 데이터와 로직을 가진 강력한 객체로 활용하는 방법을 단계별로 정리해 드립니다.1. 왜 Enum을 써야 할까요?과거에는 상수를 이렇게 정의했습니다.public static final int MONDAY = 1;public static final int TUESDAY = 2;// ...int today = 1; // 1이 월요일인지, 1월인지 코드로만 봐선 알 수 없음Enum의 장점: 코드가 명확해집니다: 1 대신 Week.MONDAY를 ..
지난 시간까지 시큐리티를 설치하고 비밀번호 암호화 설정을 마쳤습니다.하지만 아직 로그인을 할 수 없었죠?시큐리티가 우리 DB에 어떤 회원이 있는지 모르기 때문입니다.이번 시간에는 시큐리티와 내 DB를 연결해 주는 핵심 인터페이스인 UserDetailsService를 구현해 보겠습니다.Step 1. SecurityConfig 수정 (로그인 폼 활성화)가장 먼저 지난 시간에 작성했던 설정 파일(SecurityConfig)을 수정해야 합니다.Spring Boot 3.x부터는 명시적으로 설정을 안 하면 로그인 화면 자체가 안 뜨고 403 에러가 발생합니다.위치: src/main/java/com/example/board/config/SecurityConfig.javapackage com.example.board...
개념은 잡았으니 이제 진짜 코드를 만져봅시다.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..
