전체 글 21

spring-boot(13)

1. 값 검증: 사용자가 요청을 보냈을 때 올바른 값인지 유효성 검사를 하는 과정- 서버에서 로직을 처리하기 전에 사용자가 잘못된 데이터를 보냈을 경우 서버에서 로직을 처리하기 전에 사용자에게 에러 메시지를 보여주면 서비스 로직을 실행하지 않으니 시스템을 안정적으로 관리할 수 있습니다. 스프링은 자바 빈 벨리데이션(java bean validation)이라는 API를 제공합니다. 이 API를 사용하면 어노테이션 기반으로 다양한 검증 규칙을 간편하게 사용할 수 있고 입력 데이터의 유효성을 검사할 수 있습니다. 자주 사용하는 자바 빈 벨리데이션// 문자열을 다룰 때 사용@NotNull // null 허용하지 않음@NotEmpty // null, 빈 문자열 또는 공백만으로 채워진 문자열을 허용하지 않음@Not..

카테고리 없음 2025.02.18

spring-boot(12)

12 CI/CD 도입하기  12.1 CI/CD서비스를 배포하고 운용하던 중에 코드를 변경할 일이 생긴다면 코드를 수정하고 로컬에서 테스트를 진행합니다. 그리고 jar 파일을 생성해 복사하고 업로드 해 새 버전을 올립니다. 이 과정은 프로젝트의 규모가 커질 수록 힘들 것입니다. 이럴 때 도입하는 것이 CI/CD입니다. 도구를 의미하는 것이 아닌 방법을 말합니다.이 방법을 도입하면 빌드부터 배포까지의 과정을 자동화할 수 있고 잘 되는지 모니터링할 수도 있습니다. CI 지속적 통합Continuous Integration를 줄인 표현으로 개발자를 위해 빌드와 테스트를 자동화하는 과정입니다. 변경 사항을 자동으로 테스트해 애플리케이션에 문제가 없다는 것을 보장합니다. 또한 정기적으로 빌드하고 테스트하므로 여러 명..

카테고리 없음 2025.02.15

spring-boot(10)

10. OAuth2로 로그인/로그아웃 10.1 OAuthOAuth는 제3의 서비스에 계정 관리를 맡기는 방식입니다. OAuth 용어 리소스 오너: 인증 서버에 자신의 정보를 사용하도록 허가하는 주체. 서비스를 이용하는 사용자가 리소스 오너에 해당합니다.리소스 서버: 리소스 오너의 정보를 가지며 리소스 오너의 정보를 보호하는 주체. 네이버, 구글, 페이스북 리소스 서버에 해당합니다.인증 서버: 클라이언트에게 리소스 오너의 정보에 접근할 수 있는 토큰을 발급하는 역할을 하는 애플리케이션.클라이언트 애플리케이션: 인증 서버에게 인증을 받고 리소스 오너의 리소스를 사용하는 주체. 지금 만들고 있는 서비스가 이에 해당합니다.쿠키: 사용자가 어떤 웹사이트를 방문했을 때 해당 웹사이트의 서버에서 로컬 환경에 저장하는..

카테고리 없음 2025.02.13

spring-boot(9)

9. JWT로 로그인/로그아웃 9.1 토큰 기반 인증사용자가 서버에 접근할 때 이 사용자가 인증된 사용자인지 확인하는 방법은 다양합니다. 대표적으로 서버 기반 인증과 토큰 기반 인증이 있습니다. 스프링 시큐리티에서는 기본적으로 세션 기반 인증을 제공합니다. 토큰 기반 인증은 토큰을 사용하는 방법입니다. 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값인데 서버가 토큰을 생성해서 클라이언트에게 제공하면 클라이언트는 이 토큰을 갖고 있다가 여러 요청을 이 토큰과 함께 신청합니다. 토큰 기반 인증은 무상태성, 확장성, 무결성이라는 특징이 있습니다. 무상태성사용자의 인증 정보가 담겨있는 토큰이 서버가 아닌 클라이언트에 있으므로 서버에 저장할 필요가 없습니다. 클라이언트에서는 사용자의 인증 상태를 유지하면서 ..

카테고리 없음 2025.02.12

spring-boot(8)

8. 스프링 시큐리티로 로그인/로그아웃, 회원가입 구현 8.1 스프링 시큐리티스프링 시큐리티: 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크입니다. 에너테이션으로 설정이 쉽고 CSRF 공격, 세션 고정 공격을 방어해주고 요청 헤더도 보안 처리를 해주므로 개발자가 보안 관련 개발을 해야 하는 부담을 크게 줄여줍니다. 8.2 회원 도메인 만들기User.java@Table(name = "users")@NoArgsConstructor@Getter@Entitypublic class User implements UserDetails { @Id@GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id"..

카테고리 없음 2025.02.12

spring-boot(7)

7. 블로그 화면 구성하기 7.1 타임리프타임리프는 템플릿 엔진입니다.템플릿 엔진: 스프링 서버에서 데이터를 받아 웹페이지, 즉 HTML에 데이터를 넣어 보여주는 도구입니다. 템플릿 엔진은 HTML과 함께 템플릿 엔진을 위한 문법을 섞어 사용해야 합니다.  h1 태그에는 ${이름}이 text 어트리뷰트로 할당되어있습니다. p도 마찬가지입니다. 이것이 템플릿 문법입니다. 이름, 나이라는 키로 데이터를 템플릿 엔진에 넘겨주면 템플릿 엔진은 이를 받아 HTML에 값을 적용합니다.{ 이름: "홍길동" 나이: 11}  타임리프 표현식과 문법 표현식표현식설명${...}변수의 값 표현식#{...}속성 파일 값 표현식@{...}URL 표현식*{...}선택한 변수의 표현식. th:object에서 선택한 객체에..

카테고리 없음 2025.02.12

spring-boot(6)

6. 블로그 기획하고 API 만들기 6.1 API와 REST APIAPI: 클라이언트의 요청을 서버에 전달하고 서버의 결과물을 클라이언트에게 돌려주는 역할.REST API: 웹의 장점을 최대한 활용하는 API. 자원의 이름으로 구분해 자원의 상태를 주고받는 API. REST API의 장점은 URL만 보고도 무슨 행동을 하는 API인지 명확하게 알 수 있다는 겁니다. 상태가 없다는 특징이 있어서 클라이언트와 서버의 역활이 명확하게 분리됩니다. 또한 HTTP 표준을 사용하는 모든 플랫폼에서 사용 가능합니다.단점으로는 HTTP메서드인 GET, POST와 같은 방식의 개수에 제한이 있고 설계를 하기 위한 공식적으로 제공되는 표준 규약이 없다는 겁니다. REST API를 사용하는 방법규칙 1. URL에는 동사를 ..

카테고리 없음 2025.02.11

spring-boot(5)

5. 데이터베이스 조작이 편해지는 ORM 5.2 ORM이란?ORM(Object Realtional Mapping)은 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법입니다. ORM 장점과 단점1: SQL을 직접 작성하지 않고 사용하는 언어로 데이터베이스에 접근할 수 있습니다.2: 객체지향적으로 코드를 작성할 수 있기 때문에 비즈니스 로직에만 집중할 수 있습니다.3: 데이터베이스 시스템이 추상화되어 있기 때문에 MySQL에서 PostgerSQL로 전환한다고 해도 추가로 드는 작업이 거의 없습니다.4: 매핑하는 정보가 명확하기 때문에 ERD에 대한 의존도를 낮출 수 있습니다. 1. 프로젝트의 복잡성이 커질수록 사용 난이도도 올라갑니다.2. 복잡하고 무거운 쿼리는 ORM으로 해결이 불가능한 경우가 있습니다..

카테고리 없음 2025.02.11

spring-boot(4)

4. 스프링 부트3와 테스트 4.1 테스트 코드 개념 익히기테스트 코드는 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드입니다. 유지보수에 매우 좋고 코드 수정시 기존 기능이 제대로 작동하지 않을까봐 걱정하지 않아도 된다는 장점이 있기에 꼭 공부를 해야하는 부분입니다. 테스트 코드란?테스트 코드는 test디렉터리리에서 작업합니다. 테스트 코드에도 다양한 패턴이 있지만 given-when-then 패턴을 사용할 것입니다. 테스트를 세 단계로 구분해서 작정하는 방식입니다.1. given은 테스트 실행을 준비하는 단계2. when은 테스트를 진행하는 단계3. then은 테스트 결과를 검증하는 단계 4.2 스프링 부트3와 테스트애플리케이션을 테스트하기 위한 도구와 어..

카테고리 없음 2025.02.11