본문 바로가기

컴퓨터 프로그래밍116

[Memo] NGINX 서버 접속해서 vim 설치하고 Blue/Green 방식의 무중단 배포를 위해 파일 생성 기존에 인스턴스의 SSH 에 접속해서 Docker 을 설치한 후 NGINX 이미지를 다운받아 컨테이너로 실행시켰다.sudo su 명령어를 통해 관리자 권한으로 명령어를 검색했다. NGINX 서버로 접속docker exec -it nginxserver bash  nginxserver container 로 들어가 접근했다.ls 를 입력해서 파일들을 확인 cd etc/ Tab 을 두번 누르면 안에 있는 파일들을 볼 수 있다. cd etc/ nginx/conf.d vim default.conf 명령어를 입력해서 default.conf 파일 수정을 시도하면vim: command not found 문구가 뜬다. docker container 는 vim editor 가 설치되어있지 않기 때문이다.VIM 설치 apt-.. 2024. 11. 10.
[Memo] NGINX 사용을 위한 yml 세팅 무중단 배포를 위해서 NGINX 를 사용하기 위해 yml 세팅을 해줬다. 소셜로그인 redirect url 설정을 위해서 application.ymlkakao: redirect-uri: "http://localhost:8080/ssaktium/signin/kakao"google: redirect-uri: "http://localhost:8080/ssaktium/signin/google"naver: redirect-uri: "http://localhost:8080/ssaktium/signin-naver" 기존에 위처럼 설정해줬었는데 배포를 하면 localhost 가 아니라 탄력적 ip 가 들어가야하기 때문에 설정을 추가해줘야했다. spring: profiles: active: local .. 2024. 11. 10.
[CS] 무중단 배포 Youtube : https://www.youtube.com/watch?v=glyxn7TY9OUPPT : https://docs.google.com/presentation/d/1vWpgH-pwMV-kFnMne10DK8m3-zxGcY9rrF7x9LkTsxw/edit#slide=id.g31585250fb5_0_173 2024. 11. 7.
[Spring] Swagger UI 적용 🌱 Swagger UISwagger UI는 RESTful API를 문서화하고 시각적으로 표현하기 위한 도구다. API의 엔드포인트, 요청 및 응답 형식 등을 사용자에게 쉽게 이해할 수 있는 형태로 보여준다.  🌱 Swagger UI 장점자동 문서화: Swagger UI는 API 코드에 주석을 추가하거나 Swagger Annotation을 사용하여 자동으로 API 문서를 생성한다. 이를 통해 개발자들은 코드 변경 시 문서도 함께 업데이트할 수 있다.인터랙티브: Swagger UI는 사용자가 API를 직접 테스트할 수 있는 인터페이스를 제공한다. 사용자는 요청을 보내고 응답을 확인할 수 있어 API의 동작을 쉽게 이해할 수 있다.시각적 표현: API의 엔드포인트, 요청 및 응답 모델을 시각적으로 표시하여.. 2024. 11. 2.
[Spring] Soft Delete 📚 배경1. 탈퇴한 회원의 계정으로 중복 계정 생성을 막을 때2. 데이터 분석을 위해서 탈퇴한 회원에 대한 데이터가 필요할 때3. 서비스 정책 상 탈퇴한 유저의 정보를 정해진 기간동안 유지할 필요가 있을 때 등 위와 같은 이유로 soft Delete 가 사용된다.직접 User Entity 에 userStatus 라는 필드를 만들어서 삭제 유무를 파악했었는데, Spring Boot 에서 이를 지원해주기 때문에 활용하는 방법에 대해서 알아보았다.User@Getter@Entity@SQLDelete(sql = "UPDATE users SET deleted = true WHERE id = ?")@SQLRestriction("deleted = false")@NoArgsConstructor@Table(name = .. 2024. 11. 2.
[CS] CI/CD 파이프라인 구축을 위한 이해 1. CI/CD 는 세 단계를 가진다. 개발, 빌드, 배포각 단계는 하나의 서버 개념이다.2. Jar 파일 빌드 시점에 대한 고민 .jar 파일을 빌드해야하기 때문에 이 과정을 개발 단계에서 포함해서 가져가냐, 빌드 단계에서 가져가냐의 차이는 있다. 빌드 단계에서 .jar 파일을 빌드하게 해놓는다면 Github Actions, Jenkins 등 툴에 따라서 환경을 맞춰줘야한다.이렇게 하면 이미지가 가벼워진다. 개발단계에서 이미지를 만들고 도커파일 자체에서 jdk, gradle 를 정의하고 가져온다면 build 를 어떤 툴로 하든 가능해진다. but, 이미지가 무거워진다는 단점이 있다.  사실상 이렇게 만든 .jar 파일을 배포하면 끝이다.3. 서버 확장 시 생길 수 있는 문제 하지만 나중에 EC2 서버를.. 2024. 10. 28.
[CS] Spring Bean 이 없는 세상 PPT : Spring Bean - 프레젠테이션 YOUTUBE : https://www.youtube.com/watch?v=WoFiKb4oAqU 2024. 10. 27.
[CS] CI 와 CD 란? PPT : CI/CD - 프레젠테이션 YOUTUBE : [CS발표] CI / CD - YouTube 2024. 10. 27.
[Spring] 페이지네이션 정리 코드 Controller// 식물사전 리스트 조회@GetMapping("/v1/dictionaries")public ResponseEntity>> getDictionaryList( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return ResponseEntity.ok(ApiResponse.success(dictionaryService.getDictionaryList(page, size)));} 🎯 @RequestParam 으로 page, size 를 받고 defaultValue 를 설정함으로서 다른 입력이 없으면 기본 값을 설정해준다. 🎯 Page 로 반환하.. 2024. 10. 23.
[CS] ACCESS 토큰과 REFRESH 토큰 💡 Refresh 토큰이 뭐에요 Access 토큰과 비교해서 알아봅시다.구분액세스 토큰리프레시 토큰역할API 호출 시 인증액세스 토큰 재발급수명짧음 ( 몇 분 ~ 몇 시간 )김 ( 며칠 ~ 수개월 )사용 위치모든 API 요청에 사용만료된 액세스 토큰 갱신 시 사용저장 위치브라우저 메모리, 쿠키 등쿠키, 로컬 스토리지 또는 서버만료 시 처리리프레시 토큰으로 재발급만료 시 재로그인 필요 이 두 가지를 함께 사용하면 보안과 편의성을 모두 확보할 수 있다.리프레시 토큰을 통해 자주 로그인하지 않아도 되면서도, 액세스 토큰의 짧은 수명으로 보안을 강화할 수 있다.  💡 어떤 구조로 이 두 가지를 함께 사용할 수 있을까?💡 Access 토큰과 Refresh 토큰을 조합할 때의 주의사항이 뭘까?리프레시 토큰 재.. 2024. 10. 23.
[CS] 트랜잭션 오버헤드 조회 성능을 최적화 하는 과정에서 트랜잭션 오버헤드를 줄여서 성능을 향상시키는 방법을 몇 가지 제시받았는데, 트랜잭션 오버헤드가 정확히 뭔지 처음 들어봐서 한 번 알아보고자 한다. 트랜잭션 오버헤드가 뭔가요? 트랜잭션 오버헤드란 트랜잭션을 시작하고 유지하며 완료하기 위해 추가적으로 발생하는 비용을 의미한다. 이는 트랜잭션이 데이터의 무결성과 일관성을 보장하기 위해 필요한 여러 작업(락, 로그 기록, 복구 준비 등)에서 발생한다. 이 추가 비용은 CPU, 메모리, 네트워크, 디스크 I/O 등의 리소스를 소비하며 시스템 성능에 영향을 미칠 수 있다. 트랜잭션 오버헤드의 원인에는 뭐가 있나요.1. 트랜잭션 시작 및 종료 작업명령 처리 비용:트랜잭션을 시작하면 데이터베이스는 begin, commit, rollb.. 2024. 10. 21.
[Redis] 데이터를 DB 에서 조회하는 것과 캐시 에서 조회하는 것의 차이 // 인기 카드 Top3 조회 ( Redis )@Transactional(readOnly = true)public Map getTopViewCardList() { Set> topCardsWithScores = redisTemplate.opsForZSet().reverseRangeWithScores(TODAY_RANKING_KEY, 0, 2); return topCardsWithScores.stream() .collect(Collectors.toMap( tuple -> tuple.getValue().toString(), // title tuple -> tuple.getScore().int.. 2024. 10. 20.
[Redis] SpringBoot 에 Redis 초기 세팅 코드 build.gradle// redisimplementation 'org.springframework.boot:spring-boot-starter-data-redis' 의존성 주입RedisConfigpackage com.sparta.springusersetting.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;impo.. 2024. 10. 16.
[Spring] Discord 알림 구현 webhookControllerpackage com.sparta.springusersetting.domain.webhook.controller;import com.sparta.springusersetting.domain.webhook.service.WebhookService;import lombok.RequiredArgsConstructor;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestController@RequiredAr.. 2024. 10. 16.
[GIT] Remote Repository 등록 및 변경 1. Repository 생성 2. IntelliJ 파일 생성 3. git bash 터미널에 아래 코드 입력 echo "# e" >> README.md git init git add README.md git commit -m "{commit 하고 싶은 문구}" git branch -M main git remote add origin {remote 하고 싶은 Repository 주소}git push -u origin main 4. Remote 및 commit, push 성공!Remote 를 이용해서 Repository 를 변경하면, Repository 를 다른 Repository 에도 적용시킴으로서,backup 파일을 만들다든지, 반복되는 작업을 Repository 를 통해서 해결하고 시작할 수도 있다.현.. 2024. 10. 13.