목록전체 글 (33)
채채

서버를 운영하다보면 트래픽 증가, 사업 확장 등으로 서버 용량을 늘려야하고 성능을 높일 필요가 생긴다. 이럴 때 Scale Up/Scale Down 방법으로 서버를 확장시킬 수 있다. 1. Scale Up 서버에 CPU, RAM, Storage 등을 추가하거나 기존 서버보다 높은 사양으로 업그레이드 하는 것. 수직 확장이며, 성능 확장에 한계가 있음. 서버 한 대에 모든 부하가 집중되므로 장애 시 서버다운 리스크가 크다. 고성능 서버는 비용이 크다. 소프트웨어적인 예로는 AWS의 EC2 인스턴스 사양을 micro에서 small, small에서 medium 등으로 높이는 것으로 생각하면 된다. 2. Scale DOWN 스케일 다운 기존 서버와 비슷한 사양의 서버 대수를 증가시키는 방법으로 처리 능력을 업그..

8.2 회원 도메인 만들기 스프링 시큐리티를 사용해 인증, 인가 기능을 구현하는 것이 목적 1. 회원 정보를 저장할 테이블을 만든다. 2. 테이블과 연결할 도메인을 만든다. 3. 테이블과 연결할 회원 엔티티를 만든다. 4. 데이터를 조회해줄 리포지터리를 만든다. 5. 스프링 시큐리티에서 사용자 정보를 가져온다. // build.gradle에 스프링 시큐리티 의존성 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' testImplementation 'org.springfra..

1. 테스트 코드 개념 익히기 테스트 코드는 test 디렉터리에서 작업한다. 테스트 코드 패턴 중 given-when-then 패턴이란? given: 테스트 실행을 준비하는 단계 / when: 테스트를 진행하는 단계 / then: 테스트 결과를 검증하는 단계 // 새로운 메뉴를 저장하는 코드 테스트 @DisplayName("새로운 메뉴를 저장한다.") @Test public void saveMenuTest() { // given : 메뉴를 저장하기 위한 준비 과정 final String name = "아메리카노"; final int price = 2000; final Menu americano = new Menu(name, price); // when : 실제로 메뉴를 저장 final long saved..

1. 스프링 부트 3 프로젝트 만들기 IntelliJ를 이용해서 JDK 17의 새 그레이들 프로젝트를 생성한다. 그레이들 프로젝트를 스프링 부트 3 프로젝트로 바꾸기 위해 build.gradle을 다음과 같이 플러그인과 의존성들을 입력한다. plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' } group 'org.example' version '1.0' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation 'org.springframewor..

23년 2월 8일 첫 글로벌 해커톤을 위해 팀 회의를 진행하였다. 언어의 장벽으로 많은 아이디어를 표출하고 원활한 회의가 진행되지는 못했지만, 애써 나의 생각을 표현하기 위해 노력하며 소통했다. 팀 내에서 정해진 주제는 다음과 같다. cultureFinder는 다양한 공공시설을 사용하고 싶지만 찾기에 어렵다는 점을 보완하기 위해 기획되었으며. 공공기관의 이벤트와 프로그램들을 한 번에 제공하는 서비스가 기존의 지도 서비스와 차별점을 둔 점이다. 지도에 출력할 공공시설은 체육관, 박물관, 생활문화센터, 미술관 외의 4개의 항목으로 총 8개의 분류를 갖고있다. 사용자의 현 위치를 지도에 보여주며 거리를 기반으로 가까운 기관부터 정렬되어 목차가 출력된다. 이렇게 아이디에이션을 마치고 해커톤 당일엔 개발에만 집중..

ERD를 재구성하고 개발을 시작했다. 문제 해결 1 가장 먼저 직면한 문제점은 사용자가 알림을 설정할 때, 장소와 물품 태그 속성을 하나만 선택하는 것이 아니라. 여러개의 값을 넣을 것인데, mySQL과 같은 RDBMS에서는 배열을 그대로 하나의 레코드에 저장할 수 없다. 왜냐하면 이는 제1정규형에 위반되므로 기본적으로 RDBMS에서 제한하기 때문이다. 이러한 문제를 해결하기 위해 배열 형태의 데이터를 String으로 변환 후 DB에 저장하고. 꺼낼 때는 String을 파싱하여 List에 담아 보내는 방법을 택하게 되었다. ref) https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-RDB%EC%97%90-%EB%B0%B0%EC%97%B4%EC%9D%84-%EC%A0..

1️⃣JWT 2️⃣AccessToken 3️⃣Redis 📖JWT 란? JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰이며 다음과 같이 세 부분으로 구성된다. 각 파트는 점으로 구분하며 JWT는 URI에서 파라미터로 사용할 수 있도록 URL-Safe 한 Base64url 인코딩을 사용한다. 헤더(header): 토큰 종류와 해시 알고리즘 정보 페이로드(payload): 토큰에 담을 클레임(claim, 정보의 한 조각)들을 포함 시그니처(signature): secret key를 암호화한 일련의 문자열, 시그니처를 통해 토큰이 변조되었는지 확인 참조: http://www.opennaru.com/opennaru-blog/jwt-json-web-token/ JWT (JSON..

1️⃣prisma로 schema 설계하기 2️⃣댓글 삭제 API 3️⃣댓글 조회 API 📜prisma로 schema 설계하기 project ERD 중 comment 테이블을 create했다. comment 테이블은 Users 테이블과 1:n관계이고, Posts 테이블과도 1:n관계이다. 따라서 userId와 postId를 FK로 속성을 갖는다. shema.prisma model Users { userId BigInt @id @default(autoincrement()) nickname String? @db.VarChar(10) name String? @db.VarChar(10) studentId String? @db.VarChar(10) department String? @db.VarChar(20) st..

SpringBoot는 목적에 따라 패키지를 따로 생성해서 프로젝트를 관리하는데, 패키지의 구조는 2가지로 나뉜다. 1️⃣계층형 패키지 구조 - 계층형으로 패키지를 설계하는 방식 - 장: 전체적인 구조를 빠르게 파악 - 단: 디렉토리에 클래스들이 많이 모임 2️⃣도메인 패키지 구조 - 도메인 단위로 디렉토리 구성 - 장: 관련된 코드들이 응집됨 - 단: 프로젝트에 대한 이해도가 낮을 경우, 전체적인 구조를 파악하기 어려움 따라서, 복잡도가 낮고 제공하는 기능이 적어 하나의 계층에 속하는 클래스 수가 적을 때. 제공하는 기능을 명확한 기준으로 분리하기가 애매할 때. 추후에 모듈별로 분리하게 될 일이 없을 것 같은, 작은 규모의 프로젝트 ➡️ 계층형 패키지 구조 복잡도가 높고 제공하는 기능이 많아 하나의 계층..
스프링 시큐리티 : 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크 -> 인터셉터, 필터 기반의 보안 기능을 구현하기보다 확장성을 위해 스프링 시큐리티를 통해 구현하는 것을 권장. CommonOAuth2Provider: 스프링부트 2.0방식으로 넘어오며 기본 설정값을 enum(열거형)으로 저장함 -> 구글, 페이스북, 옥타, 깃허브만 해당. 네이터, 카카오 등 다른 소셜 로그인을 추가한다면 직접 추가해야함. 1️⃣ 구글 로그인 연동하기 📜사용자 정보 담당 도메인 - User User class - 사용자 정보 담당 // 생략 @Getter @NoArgsConstructor @Entity public class User extends BaseTimeEntity ..