ALL
717

[프로그래머스] Lv2 지게차와 크레인
1. 문제 설명 📌(1) 링크🔗https://school.programmers.co.kr/learn/courses/30/lessons/388353(2) 해설🕵해당 문제는 지게차와 크레인의 작동 원리를 이해하는 것이 중요하다.지게차: 박스의 4개의 면 중 한 면이라도 외부의 공기와 맞닿아 있으면 그것을 빼낼 수 있음. 만약 4면이 모두 다른 박스로 막혀 있다면 해당 박스는 지게차로 못 꺼낸다.크레인: 어디에 있든 명령 받은 박스와 같은 유형의 박스이면 꺼낼 수 있다.2. 생각의 흐름: 코드가 나오기까지 🗃️(1) IDEA 도출💡KEY WORD: BFS, BRUTE FORCE1️⃣ 지게차 구현에 대하여,지게차의 작동원리를 재현하는 알고리즘으로 BFS를 택했다.외부에 한 면을 더 그려서 BFS를 타면..
2025.04.08
CodingTest > 알고리즘-풀이

[성능 테스트] Jmeter로 시나리오 테스트 작성하기
0. 들어가며...현재 구인 구직 서비스의 서버를 만들며, 다음과 같이 구현한 상태이다. 일 (job)과 회원 (member)는 매칭(matching)이란 교차 테이블을 두고, 서로 관계를 맺고 있기에, 연관이 있는 회원은 일과 하나의 상태를 가진다.위의 의뢰인은 일의 주인이다. 따라서 상태는 OWNER만 가진다. 반면 해결사는 자신의 현재 단계에 따라 다른 상태를 가진다. 신청만 했거나 의뢰인에게 선 의뢰를 받은 상태라면, ATTENDER나 REQUEST를 가지고, 의뢰인에게 해결 요청을 승낙 혹은 거절 받거나 혹은 해결사가 선의뢰를 승낙 혹은 거절한 상태이면, YES 혹은 NO라는 상태를 가진다.START는 일을 진짜 시작해야만 가지는 상태이며, SLEEP은 해결사가 일 해결에서 노쇼한 경우 의뢰인이..
2025.03.25
Develop > BACK-END

[성능 테스트] 대량의 유저 동접을 위한 JWT 토큰 추출 및 수집기 구현
0. 들어가며...현재 진행하고 있는 구름 PROTECT에서 구현한 API에 대한 성능테스트를 하고 있다. 필자는 진정한 대량의 성능 테스트를 위해서는 매번 다른 JWT 토큰 값이 Header에 담겨야 한다고 생각했다. 이유는 다음과 같다.실제와 같은 환경을 최대한 구현할 수 있다. 실제 서비스에서도, 다른 사용자는 한 명도 사용하지 않는데, 한 사람만 요청을 5만 번 하는 경우는 극히 드물 것이다. 한 사람이 매번 같은 요청을 할 경우, DB 캐싱과 서버 캐싱으로 해당 내용이 메모리에 저장될 것이므로, 진정한 서버의 성능을 볼 수 없을 것이라 판단했다.따라서 여러 명이 서비스를 각자 사용하고 있는 것을 흉내내고자 HEADER의 Authorization에 매 번 다른 토큰 값을 넣었다.1. 토큰 생성 ..
2025.03.24
Develop > BACK-END

[네트워크] WEB-SOCKET 연결 과정에 대해 설명해주세요!
🧐 WEB-SOCKET 연결 과정에 대해 설명해주세요!KEY WORD: HTTP 1.1에서만 업그레이드 가능, STATE-LESS 에서 STATE-FULL 로, HEART-BEAT로 연결 지속!🙋🏻♂️ 면접 1분 대답 !WebSocket은 Http1.1에서만 업그레이드가 가능한 프로토콜로, 기존의 state-less한 http 요청 응답 패턴에서, heart-beat를 활용한 state-full 한 상태로 서버-클라이언트 연결을 변환합니다. 크게 다음의 3가지 과정으로 Web-Socket 연결이 이루어 집니다.클라이언트가 Header에 Upgrade: Websocket Attribute를 담아 연결을 요청합니다.서버가 Header에 Http/1.1 101 Switching Protocol을 보내,..
2025.03.23
Computer Science > 네크워크

[TROUBLE SHOOTING] 2000이상의 부하지속 시 발생하는 Socket-Exception 에러 해결
0. 환경 설정Threads 수 3000에 ramp-up 수 1을 1분 지속으로 테스트를 설정하고 헬스 체크 API에 적용하니 밑과 같은 에러를 만났습니다.java.net.SocketException: Connection reset at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:328) at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355) at java.base/sun.nio.ch.NioSocketImpl1.read(NioSocketImpl.java:808)atjava.base/java.net.SocketSocketInputStream.re..
2025.03.23
Develop > TroubleShooting

[PM] PARA를 적용한 노션 계획표 2달 후기와 개선 방안
✒ 설명(0) 들어가며...평소 노션을 활용하여 계획표를 작성하는데, 노션이 관계형 DB를 지원하는 이점을 살려, 다음과 같은 연관 관계로 계획표 기획하여 관리하였습니다.위의 계획법은 티아고 포르테의 The PARA Method에 착안하여, 작성한 노션 ERD 입니다. PARA 방식을 모르는 분들을 위해 설명하면, 모든 계획을 4가지 원칙에 따라 관리하는 것입니다.PARA 원칙첫째, 관심사 영역 분리 - 저희들의 삶에는 기간이 정해지지 않고 평생에 걸쳐 책임을 져야 하는 영역이 존재하고, 책임은 지지 않고, 지식이나 취미를 탐구해도 되는 영역이 존재합니다. 이것을 각각 책임의 영역, 관심의 영역 으로 분류 합니다. AREA의 영역둘째, 위와 같이 분리된 각 영역에 도움이 되는 아이디어, 래퍼런스, 주변인..
2025.03.22
DAILY LIFE > 회고

VPC, Subnet, gateWay에 대하여
2
0. 들어가며오늘은 인프라를 이해하기 위한 제일 기본적인 CS 지식을 정리하겠다. 바로 VPC, Subnet, gateway, routing_table 이 그것이다. 필자는 해당 개념의 존재조차 잘 알지 못했으나, 이번에 인프라 팀과 대화를 하면서 스스로 네트워크에 대한 지식이 전무함을 느끼고, 다음 회의에서는 더 잘 이해하기 위하여 학습했다. 이제 학습한 내용을 정리해보겠다.1. VPC네트워크 공간은 서부 시대 황야 처럼 드넓고 횡하다. 이 드넓은 공간에서 사람들이 교류하고 의식주를 해결하기 위해서는 같이 모여 살 특정 공간을 지정하고 마을을 건설해야 할 것이다. 드넓은 황야가 네트워크라면, 마을에 해당하는 부분이 바로 VPC이다.VPC를 만든 나는 이제 이 새로운 도시의 시장이다. 서부 시대의 시장은..
2025.02.23
Computer Science > 네크워크

Log 색깔 입히기
0. 로그가 흰색이면...보기가 힘들다.이게 인텔리제이에서 보면 그나마 나은데, 배포된 서버로 들어가 로그를 볼려고 치면 정말 구분히 힘들어진다. 이를 위해로그 레벨 별로 색깔을 적용하여 가독성을 높이려 한다.1. 적용 방법(1) 파일 구조 및 의존성 삽입resources 부분에 logBack을 둔다. 이후 로깅과 실제 구현 코드 간의 관심사 분리를 위해 @SLF4J 라이브러리를 삽입한다. 이 라이브러리를 쓰지 않으면 로그를 쓰고 싶은 모든 클래스마다 Logger 객체를 주입 받아야 한다. 이는 객체간의 결합도를 높이고, Logger 기능 자체의 유연성도 줄인다. (처음엔 Log-Back 라이브러리를 쓰다가 Log4j로 바꾸고 싶을 때 @SL4FJ를 안 쓴다면 모든 Logger 멤버를 바꿔줘야 한다;;)..
2025.02.13
Develop > BACK-END

Jasypt를 활용해 Secret-key 암호화 및 서버 배포 시 자동 복호화
0. 왜 필요한가외부 API나 DB, 미들웨어 연동을 위해서는 활용을 위해 약속한 secret-key를 들고 있어야 한다. 보통 개발자들은 설정파일에 그것을 몰아넣고, @Value()를 활용하여 그것들을 불러온다. 다음 사진과 같이 말이다.이런 secret-key들은 유출되면 해킹 등 프로젝트에 치명적인 위협을 준다. 그래서 개발자들은 항상 이것들에 대해 신경 쓰고, 인프라 팀 또한 Jenkins나 DockerHub에 키 리스트들을 따로 관리해야 해서 골치 아프다. 이를 해결하기 위해 Java의 라이브러리인 Jasypt를 활용했다.1. Jasypt란?(0) 정의단방향 암호화 혹은 단일 키 양방향 암호화를 가능하게 해주는 라이브러리이다. 이 라이브러리의 강점이라 한다면 Jasypt로 암호화한 대상을 특정하..
2025.02.12
Develop > BACK-END

공통 응답 자동화 설계 및 구현 (봉투 패턴 도입 - @ResponseBody Advice)
0. 필요성저번에 했던 6인 프로젝트의 반환 환경 모습이다. 당시 ResultResponse라는 팀 내의 공통 응답 규칙을 정하고, ResponseEntity로 반환하기 전에 DTO를 ResultResponse로 한 번 더 감싸서 반환했다.그 당시에는 큰 불편함 없이 했던 것 같지만, 다시 보니 2가지 불편 사항이 있었다.1️⃣ 매서드의 반환 타입을 항상 ResponseEntity와 ResultResponse로 감싸줘야 한다. 실제 필자가 프론트 개발자에게 줘야할 JSON 반환 객체는 TokenDTO인데, 그저 반환 규칙을 위해서 프로세스에서는 불필요한 객체를 추가해야만 한다.2️⃣ 같은 이유로 반환값 또한 두 객체를 활용해 감싸줘야 한다.이는 3인의 백엔드 개발자 중 한 명이라도 실수로 ResultRe..
2025.02.12
Develop > BACK-END

[OS] 선점형과 비선점형 스케줄링의 정의와 종류
1. CPU 스케줄링이란?복수의 프로세스 중 어떤 프로세스가 CPU를 가장 먼저 사용하고 얼마나 오래 사용할지를 결정하는 방식을 의미한다.이를 위해서 스케줄링 기법마다 다르게 프로세스들의 우선순위를 측정하고, CPU 사용시간을 산정한다.(1) 좋은 CPU 스케줄링이란?CPU란 단일 자원을 프로세스들에게 최대한 공평하게 배분하여 프로세스 처리율과 CPU 이용률을 높이고, 응답시간, CPU 과부화(오버 헤드), 프로세스들의 처리 대기시간을 줄이는 것이 좋은 스케줄링이다.공평성🆙 ➜ ( 프로세스 처리율⬆️, CPU 이용률⬆️ ) | (응답 시간 ⬇️, CPU 과부하 ⬇️, 프로세스 처리 대리시간 ⬇️)2. 선점형 스케줄링에 대하여현재 CPU를 활용하고 있는 프로세스를 A라고 하자. 이때 준비큐에서 A보다 처..
2025.02.07
Computer Science > 운영체제

항해99 코테스터디 14일차 + [백준] 1738 골목길 java 풀이
1. 문제 설명 📌(1) 링크🔗https://www.acmicpc.net/problem/1738(2) 해설🕵경로에 깡패가 있어서 가중치가 마이너스인 경우가 있다. 따라서 최적 경로는 벨만 포드로 구해야 하는데, 여기에 제약 조건이 있다.1️⃣ 이번 문제는 최소 가중치 합이 최적 경로인 일반적인 벨만 포드 문제와는 달리 최대 가중치 합이 최적 경로 이다.2️⃣ 따라서 최적 경로를 구할 수 없는 경우는 N 번째 완화과정을 거쳐도 가중치의 합이 커지는 경로가 있는 경우이다.3️⃣하지만 양의 사이클이 1에서 N까지의 경로에 영향을 주지 않는다면, 최적 경로는 그대로 존재하는 것임으로 상관 없다.2. 생각의 흐름: 코드가 나오기까지 🗃️(1) IDEA 도출💡KEY WORD: Bellman-ford, BF..
2025.02.06
CodingTest > 알고리즘-풀이

항해 99 코테스터디 11일차 + [백준] N-queen java 풀이
1. 문제 설명 📌(1) 링크🔗https://www.acmicpc.net/problem/9663(2) 해설🕵체스에서 Queen은 8방향을 갈 수 있는 말이다. (사방 탐색 + 사방의 대각)체스는 자신이 한 번의 움직임으로 갈 수 있는 경로에 있는 말을 죽일 수 있다.이 Queen을 모든 행에 하나씩 둘 때, 서로가 서로를 죽일 수 없게 두는 경우의 수를 구하는 것이다. 2. 생각의 흐름: 코드가 나오기까지 🗃️(1) IDEA 도출💡KEY WORD: BACK TRACKINGN의 최대값이 15라서, 1515 체스판에서 백트래킹을 해도 시간 초과가 나지 않는다. 따라서 *백 트래킹**을 활용한다. 경로가 겹치는지 확인하기 위해서는 다음 4가지를 확인해야 한다.1️⃣ 현재 Queen을 놓으려는 행에 이..
2025.02.05
CodingTest > 알고리즘-풀이

[NOTION] 요구사항 정의서 & API 명세서 구현
0. 개요오늘은 1️⃣ PRD(요구사항 정의서)와 2️⃣ API 명세서를 팀 노션에 부착하여 노션을 업그레이드 했다. 그간 팀 프로젝트를 하면서 느꼈던 불편했던 점들을 생각해보고, 그것들을 개선하는 형식으로 PRD와 API 명세서를 구현했다. 내가 불편함을 느꼈던 사항은 다음과 같다.1. 불편 했던 점1️⃣ 요구사항 정의서 DB와 API 명세서 DB가 따로 논다.둘이 연관관계가 없으니, API 명세서가 요구사항 정의서의 요구사항을 잘 이행하고 있는지 확인이 어려웠다. 따라서 요구사항 준수 여부를 확인하기 위해 (1) 두개의 표를 띄우고, (2) 연관 있는 것을 사람이 직접 찾고, (3) API가 요구사항을 벗어났는지 아닌지 확인하는 식으로 진행 했다. 이러니 초반에는 구현 속도가 더뎠고, 후반에는 요구사..
2025.02.02
ETC

Notion을 PM으로 활용하기 (관계형 DB와 롤업 사용 방법 및 세팅)
0. 들어가며...이번에 새로 팀 프로젝트를 하면서, 노션을 통해 프로젝트 관리를 하게 되었다. JIRA나 MATTERMOST 같은 협업툴을 지원해주던 SSAFY와 달리, 구름 부트 캠프는 그런 것이 없어, NOTION을 통해 직접 만들어야 했다. 그간 노션 활용력이 많이 높아졌으니, 좋은 기회라 여겼다. 오늘은 1️⃣ 노션의 관계형 데이터 베이스를 활용한 스프린트 관리와 2️⃣ 수식을 활용한 가시성 높이기를 한 번 해보려 한다.1. ERD 설계관계형 DB를 계획해서 사용하려면 역시 설계부터 해야한다. 그래서 ERD CLOUD를 키고, DB 설계를 시작했다. 설계 전에는 설계의 목표를 세우고 시작해야한다. 내가 세운 목표는 다음과 같다.1️⃣ 팀 멤버 별로 자신이 해야할 일이 귀속되어있다.2️⃣ 진행 여..
2025.02.01
ETC

Groom Boot Camp 합격과 Orientation
2번째 부트 캠프 합격 소식설을 쇠기 전, 합격 소식을 담은 메일이 왔다. 구름이란 회사에서 하는 2달짜리 단기 KDT 캠프였다. 해당 부트캠프를 선택했던 이유는 다음과 같다.1️⃣ KDT 수료자를 대상으로 하는 부트 캠프이다. 따라서 입문 과정을 반복하는 낭비 없이 원하는 것을 할 수 있으리라 생각했다.2️⃣ 한달은 개발, 한달은 TDD 기반 단위 테스트로 성능을 향상시키는 것에 집중한다. 이것이 주효하게 선택한 원인이었다. SSAFY에서 개발을 처음 배운 나는, SSAFY가 나의 기초와 프로젝트 구현 실력을 키워준 것에 정말 감사하고 있다. 하지만 하나 갈증을 느꼈던 부분은 완성한 프로젝트를 뜯어보며 성능을 측정하고 향상시키는 과정을 하지 못한 것 이었다. 이를 할 수 있어서 좋았다.3️⃣ 두 달 동..
2025.01.31
DAILY LIFE > 회고

[백준] 1850 최대공약수 java
1. 문제 설명 📌(1) 링크🔗https://www.acmicpc.net/problem/1850(2) 해설🕵입력으로 주어지는 A와 B는 1로 이루어진 숫자의 길이인데, 그 길이가 263으로 너무 길다. 분명 이 A와 B까지는 Long 자료형으로 표현할 수 있겠으나, 그것이 실제 가리키는 1로 이루어진 숫자는 표현하기가 어렵다. (숫자의 길이가 2^{63}이라 BigInteger로도 힘들 듯 하다.) 여기서 주목해야할 점은1️⃣ 1로만 이루어져 있다.2️⃣ 문제 제목이 최대공약수 이다.정도 일 것이다.2. 생각의 흐름: 코드가 나오기까지 🗃️(1) IDEA 도출💡KEY WORD: 문자열 GCD임의의 문자열 A,B가 특정 문자열 패턴 P의 반복으로 이루어져 있을 경우, 둘의 최대 공약수 문..
2025.01.26
CodingTest > 알고리즘-풀이

[백준] 1934 최소공배수
1. 문제 설명 📌(1) 링크🔗https://www.acmicpc.net/problem/1934(2) 해설🕵최대공약수와 최소 공배수의 관계를 알고 있는지 묻는 문제2. 생각의 흐름: 코드가 나오기까지 🗃️(1) IDEA 도출💡KEY WORD: 유클리드 호제법유클리드 호제법의 개념만 알면 문제가 쉬워서 바로 SUDO CODE로 넘어가겠다. 혹시 개념에 대해 모르시는 분들은 다음 두 개의 포스팅을 한번 읽고 오시길 바란다.https://dalcheonroadhead.tistory.com/485https://dalcheonroadhead.tistory.com/486(2) SUDO CODE 📜1️⃣ 입력으로 받은 A, B의 최대공약수 G를 구한다.2️⃣ G 로 A,B를 나눠서 몫인 a, b를 얻는다...
2025.01.26
CodingTest > 알고리즘-풀이

[백준] 11689 GCD(n,k) = 1 java 풀이
1. 문제 설명 📌(1) 링크🔗https://www.acmicpc.net/problem/11689(2) 해설🕵오일러의 피를 알고 있는지 묻는 문제이다. 오일러의 피 함수 φ(n) 이란, n 이하 자연수 중 n과 서로소인 숫자의 개수를 반환하는 함수이다.저번 오일러의 피 이론 정리 포스팅에서는 N개의 영역 내의 모든 수에 대한 오일러의 피 함수를 구했는데, 이번 문제는 N의 최대값이 1012 여서 그러한 배열을 만들 수도 없고, 문제에서도 N 하나에 대한 오일러 피 함수를 구하라 했으므로, N에 대해서만 오일러 피 함수를 구하면 된다.2. 생각의 흐름: 코드가 나오기까지 🗃️(1) IDEA 도출💡KEY WORD: 에라토스테네스의 체, 오일러 피 함수에라토스테네스의 체를 따로 구할 메모..
2025.01.26
CodingTest > 알고리즘-풀이

오일러 피 함수 이론 정리
1. 오일러 피 함수란?φ(n)=n이하자연수중n과서로소인수의개수φ(12)=4이다.2. 사전 학습오일러 피 함수의 증명을 위해서 다음 챕터에서 오일러의 곱 공식을 살펴볼 것인데, 사전에 학습해야할 내용이 있어서 미리 소개하겠다.1️⃣ 소인수: 임의의 수 K의 소수이면서 인수인 수이다. 예를 들면 12의 소인수는 2와 3 이 있다.2️⃣ 소인수 분해: 임의의 수 K를 소수로만 인수 분해하는 것이다. 예를 들어 12를 소인수 분해하면, 12=22∗3이다.3️⃣ 서로소: A와 B가 서로소라는 뜻은, A와 B의 공약수가 1말고는 없다는 뜻이다.4️⃣ φ(): 오일러 파이라고 읽는다.5️⃣ ∏p∣N: 여러 값의 합..
2025.01.25
CodingTest > 알고리즘-이론

[JAVA] ArrayList<Integer>에서 원하는 숫자 Value 지우기
0. 들어가며...해당 글은 ArrayList에서 원하는 숫자를 지우는 방법에 대한 글이다. ArrayList.remove() 함수로 지우면 되지 않겠냐 생각할 수 있지만 .remove(int i)를 넣으면, remove의 오버로딩된 함수 중 ArrayList.remove(int index)가 호출되어, i를 index로 가지는 Value를 ArrayList에서 삭제한다. 따라서 원래 의도한 'i라는 Value 지우기'는 실패한다.1. ArrayList.remove(int index)위에서 설명했듯이 remove에 원시 자료형 int를 넣으면 해당 인수를 index로 가지는 Value를 ArrayList에서 삭제한다.2. ArrayList.remove(Object o)우리가 실제 i라는 Value를 삭..
2025.01.25
Language > Java