개발

MSA 아키텍쳐란?

서론 일반적으로 프로젝트를 개발하면 한 프로젝트 파일을 만들어서 관리한다. 이러한 일반적인 구조를 모놀리식 구조라고 하는데, 이와 다르게 서비스별로 프로젝트를 생성해서 이를 관리하는 MSA (Microservice Archtiecture) 구조도 존재한다. 대표적으로 아마존과 넷플릭스가 MSA를 사용한다고 알려져있다. 이전에 진행한 프로젝트를 MSA구조로 개발했는데 복습겸 정리해볼려한다. 모놀리식(Monolithic) vs 마이크로서비스(Microservice) Monolithic Architecture 모놀리식 구조는 한 프로젝트 파일에 모든 구성요소를 넣어 개발하는 구조를 의미한다. 전통적인 방법이다. 장점 상대적으로 운영하기 용이하다. => 프로젝트 파일이 하나이므로, 관찰 대상이 하나이다. 내부 ..

개발 2023.09.28 0

쿠키 / 세션 / 토큰(JWT) 의 차이는?

서론 개발하다보면 로그인을 구현할때가 많다. 로그인 구현하는거야 쉬우나, 해당 유저가 로그인이 된 유저인지, 아닌지를 판단하는게 중요하다. http는 기본적으로 stateless 프로토콜이기에 이전에 접속한 클라이언트의 정보를 기억하지 않는다. 따라서 요청때 판단을 해야한다. 간단하게 생각해보면 모든 요청때 유저 정보를 보낼 수가 있을것이다. (쿼리 스트링과 같은 형태로 ) 당연히 이 방법은 보안적으로도 안좋고, 모든 요청에 유저 정보에 대한 파라미터를 받아야 하므로 개발도 힘들어질 것이다. 이런 문제들을 해결하기 위하여 쿠키, 세션, 토큰 등의 방식이 등장했고, 이들을 활용하여 권한이 있는 유저인지 판단한다. 개발할때는 부랴부랴 찾아서 어떻게든 구현 하는 편인데, 개념이 헷갈려서 정리해볼려고 한다. 인..

개발 2023.09.27 0

CSR, SSR 이란

보통 페이지를 렌더링하는데 사용되는 방식은 두가지가 있다. 서버측에서 렌더링하는 SSR, 클라이언트측에서 CSR. 요새는 CSR을 많이 사용하는것으로 알고 있는데, 이 두가지가 어떻게 다른지 알아보려 한다. 우선 CSR, SSR 정리전 SPA, MPA 부터 정리하고 가보겠다. SPA (Single Page Application) SPA란 처음 데이터를 모두 받아온 다음 Single page에서 필요한 요소만 받아오는 application을 의미한다. 예로, 특정 버튼을 눌렀을 때, 헤더는 고정되어 있고 일부분만 변경되는 사이트들이다. MPA (Multi Page Application) MPA란 여러개의 페이지로 구성된 application을 의미한다. 특정 버튼을 누르거나 요청했을때 새로운 html을 서..

개발 2023.09.02 0

슬랙 알람 봇 만들고 배포하기 [JAVA / SPRING BOOT]

개요 부스트캠프 챌린지 과정에서 출석체크 및 과제 제출 등 여러 활동이 있었는데, 온라인 과정이라 그런지 개발하다가 종종 잊어먹곤 했다. 그 때 자동으로 알람봇을 만들면 좋지 않을까 생각했다. 처음에는 이전에 사용해본 라인을 사용해볼까 하다가, 캠퍼들 모두에게 도움이 되면 좋을거라 생각했다. 그래서 부스트캠프에서 사용하는 Slack에 알람 봇을 하나 만들어 캠퍼와 공유했다. 대략 4주동안 활발히 사용했다. 감사하게도 많은 캠퍼분들이 좋아해주셨고, 내가 느끼던 불편한 문제를 프로그래밍으로 해결하였던 게 뿌듯했다. 당시에 만들면서 과정을 정리를 하지 않았다. 멤버십을 앞둔 지금, 멤버십에 사용할 알람 봇을 만들면서 해당 과정을 정리하려 한다. 자바, 스프링 프레임워크를 활용하여 작성했다. 아래는 전체 코드가..

개발 2023.08.28 0

OAuth 회원가입, 로그인 유지를 어떻게 해야할까?

OAuth 부스트캠프 학습 스프린트중에 OAuth를 구현할 일이 있었다. 요새 서비스라면 왠만하면 지원하는 기능인데, 나는 처음 구현해 보았다. 우선적으로 학습을 하고 구현을 하기로 했다. 학습에는 생활코딩 강의가 큰 도움이 되었으며 이후에 내 나름대로 흐름을 정리해보았다. https://opentutorials.org/course/3405 WEB2 - OAuth 2.0 - 생활코딩 수업소개 사용자가 가입된 서비스의 API에 접근하기 위해서는 사용자로부터 권한을 위임 받아야 합니다. 이 때 사용자의 패스워드 없이도 권한을 위임 받을 수 있는 방법이 필요합니다. 이를 위 opentutorials.org 그렇게 학습후에 간단하게 GitHub 기반 OAuth 로그인을 구현했다. 그런데 예상치 못한 문제가 있었..

개발 2023.11.06 0

Nest JS 프로젝트 배포 자동화 하기 (1) - jenkins, webhook

(2) 편 - https://whiporithm.tistory.com/104 (3) 편 - https://whiporithm.tistory.com/107 서론 본격적인 프로젝트를 앞서, 배포 자동화를 한 번 경험해보고 싶었다. 개발로도 벅찰 거 같아 배포에도 신경을 많이 쓰고 싶지 않기에, jenkins와 docker를 활용한 간단한 배포 자동화 구조를 만들어보려 한다. Nest 프로젝트를 배포한다고 했지만, 언어나 프레임워크가 중요한건 아니긴 하다. 어찌되었던, 아래는 내가 생각한 구조이다. 우선 코드를 push 하면 Webhook을 통해 이벤트를 보낸다 이후에 빌드서버에서 해당 코드를 가져와 테스팅 및 빌드를 진행하고, 도커 이미지화를 시킨다. 이미지 파일은 docker hub 에 올리고, 배포 서버..

개발 2023.10.29 0

백준

more

2295 - 세 수의 합 (Java)

문제https://www.acmicpc.net/problem/2295 풀이알고보면 참 단순한 문제다. 우리는 x + y + z = k 라는 공식을 활용해서 답을 찾아야 하는데, 이 표현은 x + y = k - z 로도 나타낼 수 있다는 점을 알아야 한다. x + y + z 의 경우의 수를 모두 구할려면 O(N^3) 이 걸릴 테지만  이를 조금 비틀어  x + y = k - z  를 활용하면 양쪽의 식들 값을 구하기 위해서 O(N^2) 의 시간에 풀이할 수 있다. x + y 의 값들을 set 에 저장한다음, k - z 값이 set에 있는지 확인하면 된다. 이 때 k 값이 가장 큰 값을 찾고 있기 때문에 배열을 오름차순으로 정렬해준다음,가장 뒤에서부터 k 값을 세팅해서 탐색을 시작하면 된다. k 값을 큰 값..

백준 2024.10.03 2

2493 - 탑 (Java)

문제https://www.acmicpc.net/problem/2493 풀이스택을 활용한 문제이다. 스택을 활용해서 내 기준 왼쪽편에 나보다 큰 건물을 빠르게 찾을 수 있다. 스택에는 [건물번호, 건물높이] 형태로 저장하며, case 1. 스택이 빈 경우에는 -> 앞에 나보다 큰 건물이 없다는 뜻, 0번으로 세팅하고 스택에 현재 건물을 넣어준다. case 2. 스택 값이 건물높이가 나보다 작다면           -> 스택 값이 나보다 클 때까지 빼준다. (스택에 있는 높이가 크다면 내가 찾던 가장 가까운 건물을 의미한다.)           -> 큰 값이 나오면 해당 건물 번호로 세팅해주고, 스택에 현재 건물을 넣어준다. 정리하면 스택에서 현재 건물보다 큰 값이 나올때까지 빼주다가, 큰 값이 나오면 해당..

백준 2024.10.01 0

1253 - 좋다 (Java)

문제https://www.acmicpc.net/problem/1253 풀이투 포인터를 활용해서 풀어야하는 문제이다. 값을 오름차순 정렬한다음, 가장 앞과 가장 뒤에 포인터를 위치시킨다. 포인터에 위치한 두 값을 더한 값이, 내가 선택한 값보다 크다면 -> 뒤의 포인터를 줄인다.내가 선택한 값보다 작다면 -> 앞의 포인터를 늘린다. 포인터를 이동할 때 선택한 숫자는 선택이 안되야하므로 이 부분은 예외처리 해주면 된다. 코드import java.util.*;import java.io.*;import java.util.stream.Collectors;public class Main { public Integer solution() throws Exception { BufferedReader ..

백준 2024.10.01 0

20955 - 민서의 응급 수술 (Java)

문제https://www.acmicpc.net/problem/20955 풀이유니온 파인드를 활용해서 쉽게 풀 수 있는 문제이다. 뉴런은 노드, 시냅스는 엣지로 표현한다. 우선 입력으로 들어오는 값들을 연결하되, 사이클이 발생하면 연결을 끊는 과정을 거쳐야하기 때문에 연산횟수에 1을 더해준다. 그렇게 입력값이 다 끝났다면, 그룹을 확인해서 몇번의 연결 연산을 더 해야하는지 계산해주면 된다. 예로 그룹이 3개로 나뉘어져있다면 2번의 연결 연산이 더 필요한것이다. 단 주의해야할점이 union find 를 사용하다보면 내가 속한 부모의 그룹을 가리키고 있기 때문에 그룹의 개수를 구할려면 find 연산으로 계산을 하던가, 아니면 최적화 작업을 거쳐서 그룹번호를 가질 수 있도록 설정해두어야 한다.     코드imp..

백준 2024.10.01 0

1079 - 쇠 막대기 (Java)

문제https://www.acmicpc.net/problem/10799 풀이괄호만 보면 스택먼저 생각나는 만큼, 스택을 활용해서 풀면 된다. 여는 괄호는 현재 막대기의 개수를 의미한다. 그러다가 이제 닫는 괄호가 나오면, 레이저를 의미한다. 이때 스택에서 여는괄호 하나를 꺼내서 닫는 괄호와 쌍을 맞추어 레이저가 구성된다. 그러면 막대들이 절단될것이고, 3개의 막대들이 있다고 가정 하면 3개가 잘려나갈것이다. 단, 앞서 레이저였는데 (닫는 괄호가 나왔는데) 또 닫는 괄호가 나온다면 이는 막대의 끝을 의미한다.막대의 끝을 만나면 1개를 추가해줌으로 레이저로 인해 잘린 오른쪽 값을 체크할 수 있다.   코드import java.util.*;import java.io.*;public class Main { ..

백준 2024.09.26 0