전체 글

개발 블로그 💻👩‍💻
앞서 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..
· 알고리즘
문제 https://www.acmicpc.net/problem/1034 1034번: 램프 첫째 줄에 N과 M이 주어진다. N은 행의 개수이고, M은 열의 개수이다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 램프의 상태가 주어진다. 1이 켜져있는 상태이고, 0이 꺼져 www.acmicpc.net 첫번째 풀이 - 백트래킹, 시간초과 N, M의 입력값이 50이라 불안하긴 했지만 일단 백트래킹 말고는 최적화 방법을 못 떠올렸다. 아래와 같이 백트래킹으로 진입하며 XOR로 한 줄씩 램프를 반대로 설정하도록 구현하였다. """켜져있는 램프는 꺼지고, 꺼져있는 램프는 켜진다""" N, M = map(int,input().split()) List = [] for _ in range(N):..
0. 문제 https://www.acmicpc.net/problem/22115 22115번: 창영이와 커피 커피는 종류별로 하나씩 준비되어 있기 때문에, 동일한 커피를 여러 개 마실 수 없음에 유의하라. www.acmicpc.net 1. 문제 해설 아래 힌트에 이 문구가 있다. 커피는 종류별로 하나씩 준비되어 있기 때문에, 동일한 커피를 여러 개 마실 수 없음에 유의하라. 그리고 위에도 볼드채로 '하나씩' !! 이라고 쓰여 있는데 이걸 놓치면 틀릴 수 있다. .. ㅠ 2. 문제 풀이 그래서 이 DP+냅색 문제를 두 가지 경우로 바꾸어서 이해해 보았다. 먼저, 만약 커피가 무제한으로 존재한다면? 아래와 같이 풀 수 있을 것이다. N, K = map(int,input().split()) C = list(ma..
· INFRA
개요 이전 글에서 KONG을 docker로 실행하는 방법에 대해 알아보았다. 이번에는 이 kong 컨테이너 이미지에 인증서를 입혀 https를 이용해 들어갈 수 있도록 해보자 ! SSL 인증서란? CA란? SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다. 출처 아래에서 웹브라우저는 Chrome, 웹서버는 Nginx로 이해하자. [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다) [웹서..
· INFRA
아래는 쉽게 시작하는 쿠버네티스 책과 kubernetes ko docs 를 읽고 공부하여 정리한 글입니다. Docker에게 두들겨 맞고 서버에서 OOM 오류를 계속 만나면서 컨테이너에 대해 조금 이해하게 되었다. 이제 쿠버네티스를 학습할 때가 온 것 같아 기초적인 이론 부분만 학습을 진행하였다.. 목차 1. 아키텍쳐 2. 서비스 3. DEPLOYMENT 관리 4. Configmap, Secret 5. 볼륨 1. 아키텍쳐 쿠버네티스는 쿠버네티스 클러스터, 마스터 노드, 워커 노드, 컨테이너 런타임, 영구 스토리지 등으로 이루어져 있으며 각 구성요소의 역할은 아래와 같다. 구성요소의 역할 쿠버네티스 클러스터 : k8s의 여러 리소스를 관리하기 위한 집합체로, 마스터 노드와 워커 노드를 이용해 하나의 k8s ..
· INFRA
이어서 Kong API Gateway에 대해 더 알아보자! 여기 를 참고하면 Kong + Konga + Postgresql DB 를 docker 로 설치할 수 있다. 하지만 매번 이렇게 run 명령어를 일일이 칠 수도 없을 뿐더러 잘못해 docker container를 delete 시키게 되면 모든 데이터들이 날아갈 우려가 있다. 따라서 아래와 같이 docker-compose.yml 파일에 한꺼번에 정리하고 docker volume을 마운트해놓으면 좋다. 도커에 대한 설명과 아래에 쓰인 여러 지식들은 여기 에 정리해 두었으니 참고하면 좋다! docker-compose.yml 을 이용해 여러 컨테이너 run 시키기 기본적으로 kong에 관련된 config 데이터들은 postgresql 서버에 들어가므로 k..
· INFRA
API Gateway 현재 회사 프로젝트는 Flask API Server와 React 화면으로 구성되어 있으며 여러 GET 요청을 간단히 처리하고 있다. 인증처리나 loadbalancing 기능을 구현하기 위해, API GATEWAY를 이용하여 본래의 api 로직을 해치지 않고 여러 부가 기능을 추가하는 것으로 결정했다! 이렇게 서비스를 독립적으로 마이크로하게 나누어, 서비스의 개선과 확장을 용이하게 하는 것을 MSA 아키텍처라고 부른다. KONG 아래와 같이 KONG(킹콩🦍??) API GATEWAY를 사용하여 Client와 API 간 통신에 여러 부가 기능들을 대신 수행할 수 있다. KONGA Kong 관리를 쉽게 도와주는 GUI 툴, 즉 대시보드이다. Kong 설치 나는 docker 를 이용하여 설..
· INFRA
도커를 공부하며 헷갈리는 개념을 정리하는 공간입니다. 1. Docker build와 Docker run의 차이? "Docker build"는 이미지를 생성하고 정의하는 데 사용되며, "Docker run"은 이미지를 실행하여 컨테이너를 생성하고 실행하는 데에 사용되는 명령어이다. 2. 컨테이너와 이미지 차이? 예를 들어, Python 어플리케이션을 도커 이미지로 빌드하려고 한다. Python 코드와 필요한 종속성(라이브러리)을 포함하는 도커 이미지를 만든다. 이후 이 도커 이미지를 사용하여 Python 어플리케이션을 실행하려고 한다. 이미지를 기반으로 컨테이너를 생성하고 시작한다. 컨테이너는 이미지의 인스턴스이며 실행 중인 Python 어플리케이션을 나타낸다. 예를 들어 ubuntu라는 image가 있다..
다음은 토비의 스프링 7.3~7.4장 을 공부하고 정리하였습니다. 7.1~7.2장 내용 간단 요약 SQLReader - SQL을 어떻게 읽어오는지 SqlRegistry - SQL을 어떻게 저장해둘 건지 SqlService 이란? @PostConstruct 가 달린 빈 초기화 메소드와 SqlService 인터페이스에 선언된 메소드인 getFinder()을 sqlReader과 sqlRegistry를 이용하도록 변경 자기 자신을 참조하는 빈이다. → sqlService를 구현한 메소드와 초기화된 메소드는 외부에서 DI 된 오브젝트라고 생각하고 결국 자신의 메소드에 접근하므로 이 셋을 이용하여 디폴트 의존관계를 갖는 빈을 만들 수 있다. 디폴트 의존관계란 외부에서 DI 받지 않는 경우 기본적으로 자동 적용되는 ..
다음은 토비의 스프링 6장 AOP 를 공부하고 정리하였습니다. AOP를 이해하기 전에 먼저 아래 개념이 선행되어야 한다. 빈 생명주기 (그냥 훑어봐도 이해하기 쉽다. 아래 빈 후처리~ 로직을 이해하려면 필연적으로 알아야 함 !) DI Transaction (DataBase 관련 개념) 프록시 개념 아래 여러 혼란스러운 개념들이 나오니 단어들을 헷갈리지 않고 정리하면서 보는 과정이 필요하다.. AOP를 한 마디로 말하면, 공통된 기능을 재사용하는 기법이다. spring에서 볼 수 있는 AOP의 적용 대상은 바로 @Transactional 기능이다. 우선 Transactional 의 기본 코드는 아래와 같다는 사실을 알아두자. public void upgradeLevels() { PlatformTransac..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/152995 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 생각 임의의 두 수 i, j가 있다. 만약 근무태도 점수[i] < 근무태도 점수 [j] 이고 동료평가 점수[i] < 동료평가 점수 [j] 인 경우가 한 번이라도 있다면 i 는 인센티브를 받지 못한다. 그게 아니라면 두 점수의 합이 높은 순으로 석차를 낸다. N = 10만이라면 → NlogN 알고리즘이 적합하겠다!! 문제 풀이 def solution(scores): wanho = sco..
· BackEnd
아래 글은 로버트 마틴의 클린코드 책 14장 ~ 끝까지를 읽고 작성한 글입니다. 아래 내용은 저자가 코드를 짜면서 사용하는 기교와 휴리스틱이다. 앞단의 내용과 조금 겹치는 부분도 존재하고, 내용이 이어지기 때문에 앞의 내용을 다 읽어야 이해가 쉽다. 주석 부적절한 정보 작성자, 최종 수정일, SPR 번호 등과 같은 메타 정보만 주석으로 넣는다. 쓸모 없는 주석 오래된 주석, 엉뚱한 주석, 잘못된 주석 등 쓸모 없는 주석은 코드를 그릇된 방향으로 이끈다. 중복된 코드 코드만으로 충분한데 구구절절 설명하지 말자. 성의 없는 주석 주석을 달 참이라면 시간을 들여 최대한 멋지게 작성한다. 단어를 신중하게 선택하고, 문법과 구두점을 올바로 사용하며, 간단하고 명료하게 작성하자. 주석 처리된 코드 주석으로 처리된 ..
jeonyoungseo
youngseo's TECH blog