전체 글

개발 블로그 💻👩‍💻
Template 메소드 패턴과 Callback 패턴에 대해 우선 따로따로 이해해보는 게 좋겠다 ! (이론 -> 구현 내용 순으로 구성하였습니다.) 이론 Template 메소드 패턴 (문제 상황) 핵심 기능 & 부가 기능이 모조리 섞여 있는 문제 (해결 방법) 변하는 것과 변하지 않는 것(반복되는 코드)을 분리하겠다 ! -> 상속으로 푼다. 이론보다 , 코드 샘플로 이해해보자! AbstractTemplate (변하지 않는 부분, 반복되는 부분) 이 부분이 바로 Template, 우리가 아는 파워포인트 템플릿과 비슷하게 변하지 않는, 반복되는 부분에 해당한다. package hello.advanced.trace.template.code; import lombok.extern.slf4j.Slf4j; @Slf4..
❆ 문제 시 삭제하겠습니다. 개요 대충 이렇게 풀어봤다.. 네이버 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 클..
· BackEnd
개요 회사에서 설계했던 STT 프로젝트의 아키텍처를 후회없이 개선해보고 떠나보내고 싶었다 💌 따라서 며칠간 STT api의 트래픽 제어를 위해 어떤 기술을 도입해 사용해볼지 고민했다. 이번주에 Non-blocking/Blocking에 대한 개념에 대해 공부하고 보니 event queue에 대해 좀 더 넓은 시야로 접근해볼 수 있었다. 메시지큐에는 Kafka,, RabbitMQ,, Redis,, 종류가 정말 다양한데 비교적 러닝커브가 낮은 Redis를 도입해보기로 하였다. 우선 Redis, 그리고 Event Queue에 대해 간략히 알아보자. Redis Redis(REmote DIctionary Server)는 주로 캐시나 빠른 응답 속도를 가진 DB가 필요할 때 사용하는 오픈 소스 인메모리 NoSQL 이..
· BackEnd
개요이번주 스터디 내용이다! sync/async, blocking/nonblocking은 OS에서도,, 네트워크에서도,, 프로그래밍에서도,, 빈번하게 쓰이는 개념이다. 하지만 이 둘을 절대 같은 의미로 봐서는 안된다 ! 아래는 해당 개념들을 내가 이해한 용어로 설명해보았다.Sync와 ASync호출하는 함수가 호출되는 함수의 작업 완료 여부를 신경쓰냐 마느냐가 관심사다. A가 B를 호출한다. A는 B의 작업이 완료되던 말던 신경 안 쓴다. → Async 반대로, 작업 완료 return문을 기다리거나, 또는 계속해서 (polling 방식처럼) 확인하면서 작업 완료 여부를 신경 쓴다 → SyncBlocking과 NonBlocking호출되는 함수가 바로 리턴하느냐 마느냐가 관심사다. 호출된 함수가 ‘나 불렀으니..
· BackEnd
트랜잭션에 대해 이해하고 잘 적용해 나가보자 ! ✍트랜잭션이란? 간단히, 데이터에 동시 접근하는 여러 프로그램들이 있을 때 데이터 정합성을 보장하기 위해 사용한다. ACID! 원자성, 일관성, 독립성, 지속성 원칙을 따른다. Spring에서는 어떻게 사용할 수 있을까? Spring에서 제공해주는 TransactionTemplate로 롤백, 커밋을 구현하거나,, PlatformtransactionManager를 주입받아,, 오마이갓 이부분은 쉽게 설명할 수 없다 AOP,, 등등 코드로 구현하는 방법도 있지만 오늘은 @Transaction 어노테이션으로 트랜잭션을 사용하는 방법을 알아보자. 트랜잭션 경계설정 전략 앞에서 어떤 방식으로 트랜잭션을 구현할지 설정하고, DAO 코드를 작성했다면, 다음은 트랜잭션의..
· BackEnd
[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 ..
앞서 Elastic에 text 파일들을 index로 적재해보았다. 이번에는 해당 텍스트들을 이용해 키워드를 추출하고, 키워드들이 총 몇개의 docs에 나타나는지를 추려볼 예정이다(terms 집계). 최종 목표는 '회사 도메인 사전' 만들기이다. 다시 말해 상담 TEXT 기록 내에서 사용되는 용어들을 수집하여, 이를 하나의 사전처럼 나타낼 계획이다.인덱스의 정보 단위인덱스의 정보단위로 /_settings와 /_mappings 가 사용된다. 주로 PUT 으로 인덱스를 처음 생성한 후에 GET /_settings 또는 GET /_mappings( _settings )로 index에 대한 정보들을 따로 볼 수 있다. _settings: 샤드 수나 복제본 수 등 설정 가능_mappings: 미리 정의하지 않아도 ..
· BackEnd
SpringBoot에 PostgreSQL과 MongoDB 연결하기연결이유RDS를 사용한지 어엿.. 3주밖에 되지 않았으나 3만원 결제 통보를 받고 말았다.. 💸 RDS는 자동 백업 기능,, 데이터베이스 복원을 위해 스냅샷을 생성 ,, 등의 이슈로 생각보다 비싸다고 한다. 🙄 그래서 갓선배님의 조언으로 마이그레이션을 해보기로 했다 ! (사실 서비스 전이라 엄밀히 따지면 마이그레이션 아님) 암튼 application.yml 과 함께라면 처음 써보는 PostgreSQL DB 연동도 두렵지 않기 때문에 넉넉한 프리티어를 제공해주는 Supabase PostgreSQL을 도입하게 되었다. Supabase PostgreSQL 연동우선 이 글 을 통해 DB를 만들고, 아래 DB Settings 를 참고하여 Datagr..
· BackEnd
개요 열심히 구현해둔 Whisper 배치 시스템을 통해 나온 STT Text 데이터를 통해 의미있는 서비스를 만드는 것이 이번 과제였다. 그 중 TextRank 알고리즘을 이용한 문서 요약 과제가 추가되었으나 TextRank 알고리즘은 이론적으로 설명 가능한 대안이나 현실적이진 못했다.. STT 데이터 자체는 애초에 정확하지 않다. 그래서 STT Text 를 사용하여 내용, 키워드를 파악해볼 수 있도록 ELK로 데이터 분류 작업을 해보기로 하였다. (블로그 -ES로 간편해진 텍스트 분류) ElasticSearch가 검색하는 방법 우선, ElasticSearch와 RDBMS(Mysql, Oracle)의 차이에 대해 알아보자. 아래는 가장 큰 두가지 요소인 인덱싱과 검색방법의 차이이다. INDEX Elast..
개요 이번에는 이어서 GCR을 이용해 CD를 구현해보자 ! CD란 지속적 배포를 의미하며, Github 저장소에 있는 code를 변경했을 경우 자동으로 새롭게 배포된다. 소스코드를 수정하여 배포해야 하는 상황들이 다수 발생하게 된다면 CD 작업은 필수다. CD 설계에서 Deploy 시 서비스가 다운될 수 있다는 점을 주의해야 한다. GCP는 블루 그린 전략 무중단 배포를 지원하기 때문에 다운타임에 대해 걱정하지 않아도 된다 ! 👏 이번에도 Cloud Run에서 서비스를 만들거다. 아래와 같이 서비스를 만든다. 나는 프로젝트 koala에서 서비스를 만들거다. 이번에는 [소스 저장소에서 지속적으로 새 버전 배포]를 선택하고, 아래와 같이 CD를 적용할 Github 저장소를 선택한다. GCR은 도커 기반 배포..
개요 이번에 Koala 자동화 출석부를 만들게 되면서 서버 단은 어떤 형태로 서비스할지 고민해보게 되었다. 기능이 추가될 수는 있으나, 많은 트래픽이 들어오거나 데이터가 압도적으로 많아지는 서비스가 아니기 때문에 Serverless 형태를 고민하게 되었다. 크롤링 또한 Serverless 작업이지만, 서버 자체도 Serverless로 구현하여, 서버 비용을 최소화하여 구현하기로 하였다 ! JSP + Java/Spring 배포하기 우선 CI/CD를 구현하기 전에 꼭 ! "그냥 배포"를 먼저 시도해보길 바란다. 오히려 시간을 단축시켜줄 것이다.. 오류 뜨면 골치가 너무 아파요ㅠㅠ 그리고 CI/CD는 꼭 코드 구현 전에 미리미리 해두자.. 우선 내가 만든 프로젝트 툴은 JSP + Java/Spring 이었다...
· BackEnd
개요2년간 열심히 활동했던 Koala 동아리를 이제 내려놓게 되었다 ! 지금껏 Koala 출석부 작성은 노가다성이었기 때문에 다음 기수 친구들의 고통을 덜어주고자 급하게 12월부터 코알라 출석부를 제작하기 시작했다. front부터 back까지 전 과정을 내가 스스로 구현하는(하지만 front는 매우 허접한) 프로젝트를 완성시켜보고 싶은 바램도 있었기에 의미있는 작업이었다.Serverless서버리스란 ‘서버가 없다’는 것이 아니고, ‘필요할때만 서버가 존재한다’는 것을 의미한다. EC2에 Docker image를 가동시켜 서버를 띄울 때에는 24시간 내내 서버가 떠있다. 하지만 스케줄링에 의해 작업되는 크롤링이라던가 특정 시간에만 서버를 사용하는 서비스라면, 굳이 24시간 내내 서버를 띄울 필요가 없다. ..
오늘은 2023년 !! 12월 31일이다. 간단히 개발 회고록을 쓰면서 이번 년도 반성도 해보고 마음도 다잡고자,, 이렇게 회고록을 쓰게 되었다. 2023 3학년 1학기 당차게 시작한 내 3학년 1학기 시작은 그리 행복하지 않았다 ㅎㅏㅎㅏ 대학생들이 다 그렇겠지만, 각자 다들 갈 길을 찾아 떠나기 때문에 동기들과 진득하게 같이 지내기가 쉽지 않다. 같이 지내던 사람들도 다 졸업하고, 부트캠프로 떠나고.. 이런 저런 개인적인 일들과 함께 열심히 준비했던 소프트웨어 마에스트로에 떨어지게 되었다.. 사실 면접조차 붙지 못한 채 평소 자신있던 코딩테스트에서 떨어지게 되었다... 이 때 계속 부정하고 외면하고 있었지만 외부적인 요소에 내가 엄청난 스트레스를 받고 있었다.. (아마 아무도 눈치채지 못했을거다) 이..
· 알고리즘
개요 Whisper STT 과제에 이어, 추출된 문장들을 요약하는 과제가 추가되었다. 문장 요약 방법 2가지 문장 요약에는 크게 추출적 요약(Extractive Summarization)과 추상적 요약(Abstractive Summarization)으로 나누어진다. 추상적 요약은 AI를 이용해 나름대로 새로운 문장으로 요약을 하는 것이고, 추출적 요약은 말 그대로 글에서 중요한 문장만을 추출시켜 요약하는 것이다. 우선 추출적 요약을 사용해보기로 하였다. 페이지링크 알고리즘 우리가 쓰려는 텍스트랭크 알고리즘은 페이지랭크 알고리즘을 기반으로 한다. 페이지링크는 더 중요한 페이지는 더 많은 다른 사이트로부터 링크를 받는다는 관찰에 기초한 검색기술이다. 웹페이지는 정점, 그리고 웹페이지가 포함하는 하이퍼링크는 ..
· BackEnd
URI 와 URL URI와 URL의 차이 URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다. ex.ISBN 0-486-52847-7 URL은 웹주소로, 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약을 의미한다. scheme(https), host(youngseo-computerblog.tistory.com), port(80), path(137), query(key=value 형식) 등으로 이루어진다. ex. https://www.naver.com/ ex.https://youngseo-computerblog.tistory.com/137?name=restful&date=20231220 쉽게 말하면 URI는 식별하는 역할을 하고, URL..
jeonyoungseo
youngseo's TECH blog