본문 바로가기

🧑🏻‍💻 Dev

(60)
2024년 1회차 정보처리기사 필기/실기 합격 후기 공부방법, 느낀점 이번 2024년도 1회 차 필기, 실기를 응시하고 자격을 취득했습니다. 제가 전공을 바꾸고 주변에서 가장 많이 들었던 말이 "개발자로 취업하는데 정보처리기사는 필요 없어."였습니다.그런 안일한 말만 듣고 준비하지 않고 있었고, 어느 순간 깨닫게 되었습니다.정보처리기사가 필요 없다는 말을 하는 사람들 중에 정보처리기사를 갖고 있지 않은 사람은 없었습니다. 그래서 정보처리기사는 일단 기본적으로 따야겠다는 생각으로 단기간 빠르게 준비했습니다. 1. 필기는 CBT, CBT, CBT 그리고 또 CBT저는 개정된 이후의 필기 교재를 구매해서 일단 1 회독을 시작했습니다.처음 목표는 사실 필기가 널널하니깐 실기까지 잡으면서 간다는 마인드로 공부를 시작했습니다.하지만 책에 나오는 모든 내용을 다 정독하면서 암기하기에는..
[Spring] @Async 이용하여 비동기 구현하기 비동기 구현을 하려는 이유 프로젝트에서 서버에서 발생하는 5xx Exception을 모니터링하기 위해서 Slack WebHook을 사용해서 구현했습니다. 현재 로직은 5xx 예외가 발생 -> Slack 메시지 전송 -> 클라이언트에게 응답까지의 과정이 동기적으로 진행됩니다. 여기서 사용하고 있는 Slack 서버는 제가 제어할 수 없는 부분이기 때문에 만약 Slack 서버에 지연이 생겨 응답을 늦게 준다면 어떻게 될지 생각을 해봤습니다. Slack 메시지 전송이 지연되어 정작 더 중요한 다음 과정인 "클라이언트에게 응답"이 제대로 수행되지 않는다면... 끔찍한 상황이 벌어질 수도 있다고 생각했습니다. 실제로 Slack 메시지를 보내는 push() 메서드에서 5초의 지연 시간을 주고 테스트 해보니 클라이언트..
[Jenkins] ERROR: script returned exit code 255 이번에 시작한 프로젝트에서 Jenkins를 사용해서 CI/CD 파이프라인을 구성하고 있습니다. develop 브랜치에서 작업을 하고, push를 하면 Jenkins Pipeline이 동작하면서 자동화 배포 작업이 진행됩니다. 우리 프로젝트에서는 다음과 같은 Pipeline이 동작해서 배포를 진행합니다. Git Clone Github Repository의 develop 브랜치에 변화가 발생되면 Jenkins 동작이 시작됩니다. develop 브랜치를 Jenkins 서버로 clone 해서 가져옵니다. DEV-Build 이 과정에서 프로젝트의 Build와 Test를 진행합니다. Deploy Jenkins 서버에서 Develop 서버로 SSH 통신을 통해 배포 스크립트를 실행합니다. 이 글에서는 이 "Deplo..
[Github Actions x Docker] 자동화 배포 환경 도커로 변경하기 1. 기존 아키텍처와 배포 스크립트 분석 프로젝트 진행 과정에서 초반에 간단한 인프라 설계를 위처럼 진행했습니다. 먼저 EC2(Ubuntu) 내부에 Node 16 버전을 포함해서 필요한 것들을 모두 수동으로 설치했습니다. 그 후 deploy.sh라는 스크립트 파일을 만들어 배포 스크립트를 작성했습니다. 이제 Github Actions에서 SSH 연결을 통해 EC2에 접근하여 deploy.sh를 실행하여 자동화 배포가 되도록 설정하여 완료했습니다. 기존의 스크립트는 아래와 같이 git 저장소에서 프로젝트 최근 파일을 가져온 후 추가된 npm 라이브러리를 확인하고 설치합니다. 프로젝트를 build 하고, 빌드가 성공하면 현재 실행 중인 프로세스를 확인하고 중지시켜 줍니다. 그 후 백그라운드 실행을 위해서 n..
[백준] 20210번 파일 탐색기 (Java) 20210번 파일 탐색기 문자열 유형을 혼내주고 있는 도중 내가 혼나버렸다. 문제를 골랐는데, 항상 정답률을 보고 적당한 문제들을 골랐었는데 하하 왜 안 보고 골랐을까. 일단 골라버렸고, 코드는 작성해버렸고 문제를 풀었다. 1. 문제 분석 문제를 처음 보고나서 조건이 되게 많다는 것을 느꼈다. 얼핏 보기에는 뭔가 간단하게 그냥 조건 따라서 정렬하면 되는 문제라고 판단됐다. 그래서 선택했을지도... 둘 다 숫자인 경우 둘 중 하나만 숫자인 경우 둘 다 숫자가 아닌 경우 크게 이렇게 3가지 경우로 나눌 수 있었다. 둘 다 숫자라면? 십진법으로 두 숫자의 크기를 비교한다. 더 작은 숫자가 우선순위가 더 높다. 만약 두 숫자의 크기가 같다면, 앞에 0의 개수가 적은 것이 우선순위가 더 높다. 두 숫자의 크기도..
[백준] 16934번 게임 닉네임 (Java) 오랜만에 알고리즘이다... 알고리즘은 꾸준히 해야 하는데, 이 꾸준히라는 게 너무 어려운 것 같다. 코딩 테스트를 몇 번 보면서 느낀점이 있었다. "문자열" 문제 진짜 많이 나오는데, 아슬아슬하게 맨날 못 풀고 있는 것 같았다. 그래서 문자열 유형을 한번 혼내주기로 했다. 16934번 게임 닉네임 1. 문제 분석 문자열의 Prefix를 확인해야 하고, 이미 포함되어 있는지에 대한 여부도 확인하면서 문제에 접근해야 했다. 여기서 생각났던 알고리즘은 "트라이" 알고리즘이다. (사실 써보고 싶었습니다.) 왜 "트라이"인가? 새롭게 추가되는 문자열을 이미 추가되어 있는 문자열의 prefix에 해당하는지 확인을 해야 한다. 문자열 접두어 확인을 할 때는 "트라이" 알고리즘을 선택하면 빠르게 해결할 수 있다. 트라..
[Postgresql] Enum 타입에 요소 추가하기 Enum 타입 조회하기 select enum_range(null::membership_enum); membership_enum이라는 enum 타입을 만들어서 "FREE", "STANDARD", "DELUXE"를 저장해 놨었습니다. 여기서 만약 "VIP"라는 membership_enum 타입이 추가된다면 어떻게 요소를 추가할 수 있을까요? Enum 타입에 Value 추가하기 alter type membership_enum add value 'VIP'; 위와 같은 SQL문으로 membership_enum에 "VIP"라는 요소를 추가할 수 있습니다. 근데 만약 VIP가 사라지고, VVIP가 추가되었다면 어떻게 해야 할까요? Enum 타입 Value 이름 변경하기 alter type membership_enum..
[AWS] Application Load Balancer에 Cloud Front의 요청만 허가하기 최근 아키텍처를 설계해야 하는 일이 있어서 위와 같이 Cloud Front를 앞단에 두고, ELB에 요청을 전달해서 EC2로 가는 방향으로 설계를 했습니다. 예상했던 결과대로 서버 도메인을 입력하면 API 서버에 접근할 수 있었습니다. 하지만, 원하는 결과와는 조금 다르게 ELB의 DNS 서버로도 아무나 접근이 가능했습니다. 서버에 접근하는 경로는 단 하나만 있는 게 보안상으로도 좋을 거 같아서 ELB(Origin)에서는 내가 배포한 Cloud Front에서 오는 요청만 받고, 나머지 요청은 모두 403 Forbbiden으로 처리하도록 하고자 했습니다. 1. Cloud Front에 등록된 Origin(ELB)로 보내는 요청에 헤더 추가하기 위에서는 헤더 이름을 "X-Custom-Access-Token"이..