Programming 41

[Project / PWAndora] 크롤링 언어와 라이브러리 선택기

이번 프로젝트에서는 PWA(Progressive Web App) 스토어 플랫폼을 개발하며,자동화된 크롤링 시스템을 통해 수많은 웹사이트에서 manifest.json 및 PWA 관련 정보를 수집하고 있습니다.PWA 크롤링 로직을 구성하면서 언어와 라이브러리를 선택과정에서 겪은 시행착오를 공유합니다.  1. 크롤링 기능의 필요성PWAndora의 핵심 기능 중 하나는 PWA 앱의 자동 수집입니다.이를 위해 크롤링 시스템은 다음과 같은 역할을 수행합니다.수집 대상 사이트를 순차적으로 탐색합니다.각 사이트에서 manifest.json 파일을 찾고 파싱합니다.앱 이름, 아이콘, 시작 URL, 설명 등을 추출하여 저장합니다.단순한 정보 수집을 넘어, 추출된 정보를 기반으로 앱을 자동 분류하고 소개하는 기능까지 고려..

Programming/Project 2025.03.23

[SSAFY] 2학기 공통 프로젝트 Collabit 회고

싸피 2학기의 첫 프로젝트, 공통 프로젝트가 끝났습니다.(사실 2주 전에 끝났는데 이제서야 회고를 작성합니다...)  01. 서비스 개요 프로젝트 주제는 협업능력 포트폴리오 제작 서비스였습니다.Collaborate와 IT를 합쳐 만든 서비스명, Collabit!  서비스의 핵심 기능은 크게 3가지로,Github 프로젝트를 등록하고,팀원들이 나의 협업 능력에 대한 AI 설문에 참여해주면,그 설문 결과를 바탕으로 리포트를 생성해줍니다. 02. 역할1) 팀장팀원들을 처음 모으면서 자연스레 팀장을 맡았습니다.중재를 잘한다는 점이 장점으로 작용했고,그에 비해 결단을 빠르게 내리지 못한다는 점이 아쉬웠습니다.이번 특화 프로젝트에서도 팀장을 맡았는데 이제는 결단을 잘 내리기 위해 노력 중입니다. 2) 백엔드 리드팀원..

Programming/SSAFY 2025.03.09

[Project / Collabit] WebSocket + STOMP + Redis로 채팅 구현하기

실시간 채팅 시스템에는 클라이언트와 서버 간의 빠르고 안정적인 메시지 전송이 필요합니다.이번 프로젝트에서는 WebSocket, Redis, STOMP 기술을 사용해 채팅 기능을 구현하였습니다. 서버 측 구현1. WebSocket 설정WebSocket은 클라이언트와 서버 간의 양방향 실시간 통신을 제공하는 프로토콜로,실시간 채팅 기능 구현에서 매우 중요한 역할을 합니다.Spring에서 WebSocket을 활성화하려면 @EnableWebSocketMessageBroker 어노테이션을 사용하여STOMP 프로토콜을 통해 메시지를 주고받을 수 있도록 설정합니다. @Configuration@EnableWebSocketMessageBroker@RequiredArgsConstructorpublic class WebSo..

Programming/Project 2025.02.23

[Project / Collabit] 우리 프로젝트에 Redis를 적용해야 하는 이유

작년에 토스 면접을 준비하며 Redis를 처음 접했습니다.프로젝트에 적용해보고 싶었지만 소규모인데다 시간이 부족해 적용하지 못했던 Redis를 이번 프로젝트에 적용해보게 되었습니다.어떤 기술을 프로젝트에 사용할 때는 그 기술을 사용하는 당위성이 필요하다고 생각합니다.왜 많은 기술 중 Redis를 고르게 되었는지, 왜 프로젝트에 이 기술을 적용해야 하는지 정리해보려 합니다.01 Redis란?Redis(Remote Dictionary Server)는 고성능 키-값 저장소로, 오픈 소스 기반의 NoSQL 데이터베이스입니다.데이터의 빠른 처리를 위해 메모리에 데이터를 저장하고, 필요에 따라 디스크에 데이터를 지속적으로 저장하여 데이터 손실을 방지합니다.다양한 데이터 타입을 지원하며, 캐싱, 세션 관리, 메시지 ..

Programming/Project 2025.01.19

[SSAFY] SSAFY 1학기를 마무리하며, 1학기 회고

싸피 12기로 입과하고 어느덧 5달이라는 시간이 지났다.1학기가 끝난 뒤의 나는 어떤 모습일까 걱정 반 기대 반이었는데이제 2학기를 앞두고 방학을 보내고 있다니 기분이 이상하다.7월부터 지금까지 싸피에서 있었던 일들을 정리해보며 한 학기를 마무리해보고자 한다.12월 현재의 기억이라 약간의 왜곡은 있을지도…7월01 임시반아는 사람 한 명 없던 싸피에서 처음 친해진 사람들.첫 팀 프로젝트 구성원 모두가 좋아서 오랜만에 팀플이 재미있었다.그뒤로 한 학기 동안 알고리즘 스터디를 함께 할 정도로 좋은 사람들을 만났다.02 자치회싸피 자기소개서에도 적었듯이 자치회 활동이 하고 싶었다.임시반 마지막날 소규모 회식자리에서 맞은편에 앉았던 오빠와 마침 같은 반이 되었다.그 자리에서 자치회 하고 싶은 사람!을 물었을 때 ..

Programming/SSAFY 2024.12.12

[백준/Java] 2933번 미네랄

1. 문제 이 문제는 그래프 탐색을 기반으로 한 구현문제이다.동굴의 미네랄을 파괴하며 클러스터가 분리되면새롭게 생성된 클러스터를 아래로 떨어뜨리는 문제이다. 2. 풀이 문제를 이해하기 위해서 해야 하는 일을 순서대로 정리해보았다. 1. 동굴 입력 받기2. 높이와 막대 던지는 방향 확인해서 미네랄 파괴하기3. 파괴된 미네랄 주변 클러스터 분리 여부 확인하기4. 분리된 클러스터를 아래로 떨어뜨리기5. 2 ~ 4번 반복하기6. 최종 미네랄 모양 출력하기 1. 동굴 입력 받기동굴을 char[][] 배열로 입력 받는다.'x'는 미네랄이고 '.'은  빈 공간이다. 2. 높이와 막대 던지는 방향 확인해서 미네랄 파괴하기가장 아래가 1층이므로 높이 h가 주어졌을 때 r - h로 해당 층 좌표를 구할 수 있다.던지는 방..

[SSAFY 12기] 싸피 12기 최종 합격, 비전공자 에세이부터 면접까지

- 2024년 4월 22일(월) ~ 5월 7일(화) 17시 : 지원서 접수- 2024년 5월 8일(수) ~ 5월 18일(토) : 에세이 제출- 2024년 5월 11일(토) 10시, 13시, 16시 SW적성진단(비전공자)- 2024년 5월 19일(일) 11시, 15시 코딩테스트(전공자)- 2024년 5월 28일(화) 15시 인터뷰 대상 발표- 2024년 6월 5일(수), 7일(금) 인터뷰(전공자)- 2024년 6월 10일(월) ~ 12일(수) 인터뷰(비전공자)- 2024년 6월 19일 15시 최종 합격 발표  지원서 접수부터 SW 적성진단은 이전 게시물에.... https://jemarque.tistory.com/entry/SSAFY-12%EA%B8%B0-%EC%8B%B8%ED%94%BC-12%EA%B8%..

Programming/SSAFY 2024.06.20

[백준/python] 1074번 Z

1. 문제 이 문제는 배열을 한 변의 길이가 2 ** n인 배열을 Z 모양으로 탐색하며r행 c열을 몇 번째로 방문하는지 출력하는 프로그램이다.r과 c, 그리고 순서 모두 0부터 시작한다. 2. 풀이재귀적으로 접근하기! 4등분을 반복한다!1. 만약 size가 1이 될 경우 ans는 start로 초기화한다.2. size가 2 이상인 경우 배열을 4등분하여 r과 c가 어디에 위치하는지 확인한다.3. 해당 사분면에 대해서 r과 c의 값을 갱신하고 해당 조각의 가장 왼쪽 위가 몇 번째인지를 구한다.4. 위와 같은 방법으로 find 함수를 반복한 뒤 ans를 출력한다. 3. 코드import sysinput = sys.stdin.readlinedef find(start, size, r, c): global an..

[백준/python] 1927번 최소 힙 - heapq 기능 정리

1. 문제우선순위 큐, 힙큐를 활용하여 풀어야 하는 문제. 2. 풀이heapq의 기본적인 동작, heappush와 heappop만 활용하면 되는 문제이다. - heapq.heappush(배열 이름, 원소)- heapq.heappop(배열 이름) 이 두 가지만 알면 이 문제를 쉽게 풀 수 있다.단, 평소에 사용하던 기본 리스트나 deque의 사용법과는 좀 달라서 주의가 필요하다. 3. 코드import heapqimport sysinput = sys.stdin.readlinen = int(input())arr = []for i in range(n): x = int(input()) if x == 0: if len(arr): print(heapq.heappop(arr)..

[백준/python] 18110번 solved.ac

1. 문제이 문제는 주어진 문제의 난이도를 절사평균으로 구하는 문제다.위아래 15%를 제외하고 평균을 계산하되, 정수가 아닌 경우 모두 반올림한다. 2. 풀이python의 내장 함수 round는 사사오입이 아니다.우리가 일반적으로 알고 있는 반올림은 사사오입.4 이하는 버리고 5 이상은 올리는 반올림이다.그러나 python의 round는 오사오입이다.5 미만과 5 초과를 기준으로 버림과 내림을 실행한다.5일 경우에는 짝수냐 홀수냐에 따라서 결과가 달라진다.즉, 이 문제에서는 python의 내장함수 round를 사용해서는 안 된다.1. n을 입력 받아서 만약 0명일 경우 난이도 0을 출력한다.2. 일반적인 반올림을 하기 위한 함수를 만든다.3.  score을 입력 받고 절삭할 인원수를 반올림하여 찾는다.4..