제 4회 KAUPC 알고리즘 경진대회 KAUPC:2024단, 2022 KAUPC의 경우 기출문제의 해답이 제공되지 않습니다.kaupc2024.netlify.app대회 개최우리 학교는 경인지역 6개 대학 소속으로 매년 SHAKE! 대회에 참여하고 있다. 이 대회에 참여하기 위한 10명의 인원을 교내에서 자체적으로 선발하고 있고 매년 KOALA 동아리에서 주최하는 KAUPC로 선발하게 된다 ! 이번 년도는 백준이 아닌 코드트리 사이트에서 진행되었다. 코드트리는 알고리즘을 학습하고 코딩테스트를 연습할 수 있는 플랫폼으로, 우리학교 소중대와 연계되어있으며 교내 스터디나 프로그램들도 많이 시행하고 있다. 문제 출제는 3월부터 미리미리 준비했고 출제진은 kau0303, engus525, beans3142, 20wj..
전체 글
개발 블로그 💻👩💻2024 당근 Summer 인턴 백엔드 직무에 합격하게 되었다 🎉 포트폴리오와 이력서당근 인턴 서류 전형에서는 이력서와 포트폴리오를 제출해야 한다.포트폴리오는 소마 면접 때 제공받은 노션 틀을 그대로 사용하였고, 프로젝트 별로 내용 -> 발생 문제 및 해결방법 -> 아키텍처 순서대로 상세하게 기록하였다. 이력서에는 프로젝트 별 주요한 내용들만 뽑아 요약한 후 자세한 사항들은 커밋이나 포트폴리오 주소를 달아 표기하였다.포트폴리오 가독성을 높이기 위해 버스나 지하철에서 정말 많이 읽어보고 수정하는 작업을 반복했는데, 정성을 쏟은 보람이 있었다 :) 서비스 제출칸이전년도 대비 이번 당근 인턴 서류의 가장 큰 차이점은 서비스 제출칸이었다. 배포~운영 까지 해본 서비스에 대한 기술을 해야했고, 50명 정도의 유..
과제진행 중인 프로젝트에서 검색 기능 구현 과제를 맡게 되었다. 키워드(ex. 헤어)를 인풋으로 받아 요청하면, 키워드가 포함된 포트폴리오 리스트들을 반환받아야 한다. 단순히 MySQL의 LIKE, OR 문법을 사용하여 구현할 수 있지만, OpenSearch(ElasticSearch) 검색엔진을 사용하게 되면 역인덱싱이 가능하기에 훨씬 빠르게 검색 기록을 가져올 수 있다. ElasticSearch(OpenSearch)의 역인덱싱 로직에 대한 설명은 이전 블로그 글에서 참고할 수 있다. AWS OpenSearch vs ElasticSearchAWS OpenSearch는 ElasticSearch를 기반으로 만들어진 툴이다. ElasticSearch와 OpenSearch의 역사(?)를 알아보면 재미있는 내용들..
https://youngseo-computerblog.tistory.com/158 에 이어지는 글입니다.트러블 슈팅Elastic Beanstalk을 사용하다 여러 문제 상황에 부딪히면 어디에서 발생하는 문제인지 찾기가 너무 어렵다.. 우선 AWS에서 친절하게 Elastic Beanstalk 내부 작동과정을 설명해주지 않을 뿐더러 에러 로그에 대한 해결방법 내용이 잘 나와있지 않다 🥲그래도,, 용을 쓰고 EC2를 뜯어보고, eb-engine.log를 참조하며 해결할 수 있었다. 1. 환경변수 를 못 읽는 문제Failed to parse the host:port pair '${RDS_HOSTNAME}:${RDS_PORT}'ElasticBeanstalk으로 RDS를 연동할 경우 자동으로 연동된 RDS의 H..
Lost Update 문제Tomcat(Java/SpringBoot)와 같은 멀티쓰레드 환경에서 트랜잭션 격리 수준으로 온전히 해결되지 않는 동시성 문제가 있다. 바로 Lost Update 현상이다. 아래 예시를 살펴보자. A 트랜잭션이 data를 0으로 읽었고, B 트랜잭션이 끼어들어 data를 0으로 읽었다. (잘못 읽었음에도) A는 +1 연산을 수행하고 B 또한 +1 연산을 수행한다. 최종적으로 원한 값은 2였으나 Update 하나를 잃어버려 +1의 결과값을 갖게 되었다.결론부터 말하면, 이 문제를 해결하기 위해 DB Lock 을 사용할 수 있다.문제가 되는 코드아래는 Member가 WishList를 추가하는 과정에서 Portfolio에 wishListCount 필드를 +1 해주는 과정이다.우선 요청..
모두가 알다시피 인증 기능 구현은 매우 무겁다 😬현재 진행 중인 프로젝트는 모바일 기반 플랫폼 서비스로, OAuth2.0를 사용한 카카오, 구글, 애플 로그인을 구현하는 것을 목표로 하고 있다. 그러나 소셜 로그인 기능의 경우 메인로직이 아닐 뿐더러, 유저 입장에서 거부감도 심하게 들 것이고, 우리 팀도 OAuth2.0를 모두 이해해 구현하기에는 2주 정도의 시간이 허비될 것 같아 간단히 유저만 구분할 수 있는 로직으로 1차 배포를 진행하기로 하였다.SpringSecurity 를 사용한 이유SpringSecurity는 Springboot로 들어오는 Request/Response와, 실질적인 CRUD를 처리하는 DispatcherServlet 사이의 Filter chain 형태로 이루어져 있다. (Req..
S3S3는 AWS에서 가장 처음 런칭한 프로젝트라고 한다. 이미지 저장소로 잘 알고 있는 이 S3, Simple Storage Service에 이미지 저장소를 만들어보자.S3 Object의 구성요소Key - 파일의 고유 식별자로, bucket/test/example.png와 같은 고유한 파일 경로를 의미한다.Value - 파일의 내용(예: 이미지 바이너리 데이터, 텍스트 데이터)Version ID - 파일의 버전 아이디로, 같은 파일명이나 다른 버전으로 올리고 싶을 때 사용한다. 이를 통해 롤백 가능!Metadata - 데이터의 데이터라고도 불리는, 파일의 정보를 담은 데이터를 의미한다.(예. 최종 수정일, 파일 타입)CORS(Cross Origin Resource Sharing) - 한 버킷의 파일을 ..
프로젝트를 본격적으로 수행하기 전에 CI/CD를 미리 구축해 놓기로 하였다. 🙌CI/CDCI/CD는 지속적 통합/배포 환경을 뜻한다. 여러 명의 개발자가 함께 작업하는 과정에서 꼭 필요한 작업이다. CI를 통해 코드를 지속적으로 통합(PR 후 merge 과정으로 이해해도 좋음)할 때 이를 자동으로 테스트하여 충돌이나 버그를 최소화할 수 있으며, CD를 통해 지속적으로 통합된 코드를 자동으로 프로덕션 환경에 배포할 수 있다.무중단 배포CD 과정에서 무중단 배포가 존재하지 않는다면 이 세상 서비스들은 모두 업데이트 시 사용자를 blocking해야 하는 불상사가 일어날 것이다!! 이를 막기 위해 무중단 배포가 필요하다.간단하게 무중단 배포 방식을 알아보자.Rolling 배포 구버전에서 신버전으로 점진적으로 ..
전체적인 후기실무적인 부분에 대해서 엿볼 수 있다.아키텍처 설명이 비교적 얕아서 해석이 어렵지 않다.구현 툴(예를 들면 RDBMS vs NoSQL) 을 선택하는 기준에 대한 기술이 잘 되어있다.CS적인 해결방식을 많이 엿볼 수 있다. 여러 해결과정들이 어디서 들어본 느낌이 계속 든다. 이것이 CS 의 중요성..?? 돌고도는 CS..어떻게 활용하면 좋을까?요즘 면접 질문들이 더욱 현업과 관련해서 많이 물어보는 게 느껴진다. 아키텍처에 관심이 많다면 이번 기회에 여러 기술을 살펴보고, 기억해두었다가 이후에 적용할 때 써보면 좋을 것 같다.문제 해결의 방향성을 컴퓨터 공학적으로 풀어 나가고 싶다면 추천! 경쟁력이 생길 것이다.기억에 남는 내용들블룸필터라고 들어봤는가..?특정 원소가 집합에 속하는지 검사하는데..
Template 메소드 패턴과 Callback 패턴에 대해 우선 따로따로 이해해보는 게 좋겠다 ! (이론 -> 구현 내용 순으로 구성하였습니다.)이론Template 메소드 패턴(문제 상황) 핵심 기능 & 부가 기능이 모조리 섞여 있는 문제 (해결 방법) 변하는 것과 변하지 않는 것(반복되는 코드)을 분리하겠다 !-> 상속으로 푼다.이론보다 , 코드 샘플로 이해해보자!AbstractTemplate (변하지 않는 부분, 반복되는 부분)이 부분이 바로 Template, 우리가 아는 파워포인트 템플릿과 비슷하게 변하지 않는, 반복되는 부분에 해당한다.package hello.advanced.trace.template.code;import lombok.extern.slf4j.Slf4j; @Slf4jpublic a..
❆ 문제 시 삭제하겠습니다. 개요 대충 이렇게 풀어봤다.. 네이버 2024 코딩테스트 전형 3.18 까지 서류를 작성해서 제출한 이후 3.22 에 코딩테스트를 보게 되었다. 총 3문제를 2시간동안 풀어야 하고, 따로 해설이나 기출문제는 제공해주지 않는다. ❆ 제가 풀이한 내용을 바탕으로 정리하였습니다. 풀이가 정해가 아닐 수 있습니다. ❆ 자세한 문제 지문은 생략하였습니다. 1번 문제 - 자료구조 + 누적합 우선 누적합으로 각 식물의 상황들을 전체적으로 구현해볼 생각이었으나 누적합 2차원 배열을 만들 경우 시간초과 문제로 택도 없었다. 따라서 자료구조를 사용했다. {식물 num: 해당 식물에게 물을 주는 날짜들} 예를 들면 {1:[1, 3, 6, 19]} 로 식물에게 물을 주는 날짜들을 딕셔너리 형태로 ..
개요소마 지원 안 해본 사람 없겠지!?! 작년 3학년에 올라가면서 소마 14기를 지원하여 불합격을 맛본 이후.. 올해는 꼭 합격하고자 실력을 더 다져왔다🔥 4학년 총 학점을 종설 6학점만 남겨왔으니 말 다했다고 생각하고, 올해는 합격할 수 있게 되었다. 합격 후기보다도, 소마 활동을 하고픈 나같은 사람이 있을 것 같아 현실적인 준비 방법에 대해 공유해보려고 한다.🙌 유캔두잇 !!! [2024 선발 일정]■ 1차 코딩테스트 - 2월 24일■ 1차 코딩테스트 합격발표- 2월 28일■ 2차 코딩테스트 - 3월 2일■ 2차 코딩테스트 합격발표- 3월 6일■ 심층 면접- 3.14(목) ~ 3.16(토)■ 합격발표- 3.22(금) 2시준비 과정본격적인 준비는 1월 16일부터 진행했다. 주변에 소마를 준비하고자 ..
평소 모호하게 이해하고 있던 패킷의 이동 경로에 대해 이번 스터디에서 함께 이야기해보기로 했다. 대체 데이터가 어떤 방식으로, 어디를 통해, 어떤 모습으로 이동하기에 우리가 여러 외국 사이트들도 문제 없이 빠르게 볼 수 있는 것인지! 알아보자. 네트워크에서 패킷의 이동 과정을 OSI 7계층을 응용하여 전체적으로 이해해 보았다. 패킷의 이동 과정 패킷의 이동과정은 전반적으로 이렇다. Source host 가 나의 컴퓨터라고 하고, Destination host는 내 친구의 컴퓨터, 또는 www.google.com이라고 가정하자. 이 때 www.google.com은 DNS를 통해 IP 주소를 찾아야 한다는 것을 제외하고는 통신 방법은 동일하다. [DNS 에 대한 개념 먼저 살펴보기] A 컴퓨터(source ..
개요아무 생각 없이 인증처리를 안 해놓은 벌로 누군가의 침입이 일어났다.. 😱어쩐지 람다 함수 절반이 안 돌아서 데이터를 살펴보니 누군가.. 백준에 없는 아이디와 이름을 넣어놨다. 심지어 스터디에도 넣어놨넴... 😵 인증처리를 미리미리 해뒀으면 좋았겠지만, 지금이라도 코알라 임원진끼리만 공유할 수 있는 비밀번호 처리를 해두는 것이 좋겠다 .Spring SecuritySessionSpring Security는 기본적으로 JSESSION_ID라는 이름을 가진 세션 방식의 인증 메카니즘으로 인증을 처리한다. Spring Security를 공부하다 보면 JWT 개념에 대해서도 같이 공부하게 되는데, 토큰(JWT) 방식과, 세션 방식은 엄연히 다른 내용이므로 이에 대해 알고 가야 한다 !세션에 대한 내용에 대..
Java Spring을 사용하면서 드는 가장 큰 고민은 역시나 어떻게 하면 잘 쓸 수 있을까 이다. 이번 프로젝트는 규모가 크지는 않더라도 제대로 끝내보자고 생각했다! 구현 도중 Entity간 연관관계는 어떻게 줄지, 쿼리는 어떻게 작성할지(어디에서 어떻게 조회할지), 데이터가 없는 경우 Null 처리는 어떻게 할지, 코드는 어떻게 보기 쉽게 작성할지,, 등등 고민을 많이 하게 되었고 다음 프로젝트에서는 이 고민들을 더욱더 반영해보고 싶다 접근제어자, 생성자 사용 클래스와 멤버의 접근 권한을 최소화하자 는 것이 접근제어자의 핵심이다. 접근제어자를 공부하면서 생성자와 static, final 등의 변수도 함께 공부하는 것이 도움이 많이 되었다. 접근수준 private : 멤버를 선언한 top level 클..
개요 회사에서 설계했던 STT 프로젝트의 아키텍처를 후회없이 개선해보고 떠나보내고 싶었다 💌 따라서 며칠간 STT api의 트래픽 제어를 위해 어떤 기술을 도입해 사용해볼지 고민했다. 이번주에 Non-blocking/Blocking에 대한 개념에 대해 공부하고 보니 event queue에 대해 좀 더 넓은 시야로 접근해볼 수 있었다. 메시지큐에는 Kafka,, RabbitMQ,, Redis,, 종류가 정말 다양한데 비교적 러닝커브가 낮은 Redis를 도입해보기로 하였다. 우선 Redis, 그리고 Event Queue에 대해 간략히 알아보자. Redis Redis(REmote DIctionary Server)는 주로 캐시나 빠른 응답 속도를 가진 DB가 필요할 때 사용하는 오픈 소스 인메모리 NoSQL 이..
개요이번주 스터디 내용이다! sync/async, blocking/nonblocking은 OS에서도,, 네트워크에서도,, 프로그래밍에서도,, 빈번하게 쓰이는 개념이다. 하지만 이 둘을 절대 같은 의미로 봐서는 안된다 ! 아래는 해당 개념들을 내가 이해한 용어로 설명해보았다.Sync와 ASync호출하는 함수가 호출되는 함수의 작업 완료 여부를 신경쓰냐 마느냐가 관심사다. A가 B를 호출한다. A는 B의 작업이 완료되던 말던 신경 안 쓴다. → Async 반대로, 작업 완료 return문을 기다리거나, 또는 계속해서 (polling 방식처럼) 확인하면서 작업 완료 여부를 신경 쓴다 → SyncBlocking과 NonBlocking호출되는 함수가 바로 리턴하느냐 마느냐가 관심사다. 호출된 함수가 ‘나 불렀으니..
트랜잭션에 대해 이해하고 잘 적용해 나가보자 ! ✍트랜잭션이란? 간단히, 데이터에 동시 접근하는 여러 프로그램들이 있을 때 데이터 정합성을 보장하기 위해 사용한다. ACID! 원자성, 일관성, 독립성, 지속성 원칙을 따른다. Spring에서는 어떻게 사용할 수 있을까? Spring에서 제공해주는 TransactionTemplate로 롤백, 커밋을 구현하거나,, PlatformtransactionManager를 주입받아,, 오마이갓 이부분은 쉽게 설명할 수 없다 AOP,, 등등 코드로 구현하는 방법도 있지만 오늘은 @Transaction 어노테이션으로 트랜잭션을 사용하는 방법을 알아보자. 트랜잭션 경계설정 전략 앞에서 어떤 방식으로 트랜잭션을 구현할지 설정하고, DAO 코드를 작성했다면, 다음은 트랜잭션의..
[KAU 알고리즘 동아리 출석부] Koala-Attendance-Server 깃허브 주소 https://github.com/kauKoala/Koala-Attendance-Server 웹 주소 https://koala-server-7djnmif25q-an.a.run.app/main ✍️ 소개 코알라 동아리에서 스터디를 운영할 때, 운영자들이 출석부를 작성하기 위해 카카오톡 창을 하나씩 확인해야 하는 불편함을 해소하고자 만든 출석부 자동화 서비스이다. 한 달 간 거쳐서 프론트와 백을 담당해 만들게 되었고, 목표는 사실상 스터디 전 1월 초까지였으나 인턴,, 대회,, 지원,, 등등 여러 이슈로 목표 안에는 끝내지 못했다. 그래도 빨리 마무리 완료 ! ✍️ 아키텍처 ERD ERD는 아래와 같이 설계되어있다. 크..
이 글은 Springboot war 파일 배포 글의 후속편입니다. 위 글에서 나는 파일을 jar 방식으로 배포했고 문제 없이 동작했었다. 그런데...... ??? 후.. build.gradle에 여러 의존성을 추가하고 커밋하고.. 한 이후 갑자기 빌드가 실패하기 시작했다.. 아직도 정확히 어떤 커밋이 영향을 준건지는 잘 모르겠다😑 커밋 지워버림.. 그래도 정석적인 방법으로 다시 구현해볼 수 있었고, 보이는 것과 같이 결국 build에 성공했다 ! 이 짜릿했던 순간을 함께 알아보자 😆 결론적으로 말하면 war 파일을 jar 형식으로 배포하지 말자.. 유효한 jarfile이 아니기 때문에 아래 오류를 볼 수 있다. Error: Invalid or corrupt jarfile /app.war WAS 와 WS ..