선도기업 아카데미란? (Feat. SSAFY가 나에게 가져다 준 것)
·
기타
SSAFY를 수료한지도 벌써 6개월이 되어간다.1년이나 되는 교육과정에, 열정적인 사람들이 모인 부트캠프다보니 굉장히 많은 사람들을 만났고, 많은 경험을 했고, 또 많이 성장할 수 있었다.(한가지 스포일러를 해보자면, 싸피에서 진행되는 4개 프로젝트중 3개 프로젝트에서 1위를 수상했다😀!)그래서 오늘은 이러한 경험과 성장에 대해 포스팅해보려고 한다. 개발실력과 기술적인 얘기보다는, 이 프로그램이 나에게 가져다 준 경험, 그리고 그 감상에 초점을 맞춘 글이 될 것같다. 우선, 이러한 훈련과정을 알게된 경로인 '선도기업 아카데미'에 대해 먼저 알아보도록 하자. 선도기업 아카데미 훈련과정나는 삼성에서 진행하는 SSAFY를 들었지만, 사실 요즘은 기업에서 진행하는 훈련과정이 아주x100 많다. 그리고 이렇게 ..
Redis로 최근검색어 구현하기
·
프로젝트/빼곡
'빼곡'을 개발하면서, 유저의 최근검색어를 보여주는 API를 구현하게 되었다.  기본적으로 RDB를 사용하고 있었으므로 CRUD로 구현해도 되지만, 몇가지 의문이 생긴다.1. 해당 데이터는 검색 페이지에 접근할때마다 필요한데, 매번 DB에 접근해서 가져오는건 너무 느리지 않을까?2. 최근 검색한 5개의 검색어만 저장하는데, 검색어 추가에 따라 insert 및 delete(5개가 넘을때) 작업이 수행되는건 너무 오버헤드가 크지 않을까?3. 최근검색어를 삭제할때마다 RDB에서 해당 검색어를 삭제하는 작업도 기능에비해 오버헤드가 크다. 결론적으로, '최근검색어'라는 기능을 구현하기에 RDB는 오버헤드가 큰 접근법이라는 판단을 하게 되었다.그렇다면 RDB에 접근하지 않고 이 기능을 구현하려면 어떻게 해야할까? ..
코딩 테스트 대비 MySQL 문법 총정리
·
알고리즘
올해 하반기 신입공채를 준비하면서, 코딩테스트를 굉장히 많이 봤던것같다.대기업, 중견기업, 은행권, IT회사 등 가리지 않고 응시하게 되었는데, 특히 대기업과 은행권 쪽에서는 SQL이 꼭 필수적으로 출제되었다. 보통은 한문제에서 최대 두문제까지 나왔고, 난이도는 천차만별이였다... 분명 옛날에는 코테수준의 SQL은 어렵지 않다고, 특히 은행권은 어렵지 않다는 의견이 지배적이었던거 같은데^^;; 최근 코테 경향을 보면 그렇지만도 않은것같다. 쉬운건 정말 쉽지만, 어려운건 정말 어렵다는 느낌...왜 그렇게 생각했냐면, 지엽적(?)인 함수를 써야되는 문제들이 다수 출제되었다. 나는 프로그래머스 SQL 고득점 Kit를 통해 대비했는데, 취준 초반 시절엔 '음.. 어려워봤자 Join문이나 서브쿼리 정도 아닐까?'..
SSAFY 싸피 10기 전공자 합격 후기 + 팁
·
기타
삼성 SW아카데미, 즉 싸피를 수료한지 6개월이 되어간다. 인생에 있어 정말 잊기 힘들것같은 좋은 경험이었는데, 좋은 교육인만큼 들어가기도 힘들다. SW교육을 들어가는데 자소서(에세이)에 시험에 면접까지..! 취업과정이나 다름이없다ㅋㅋㅋ 당시 인터넷의 많은 합격후기들 덕분에 수월하게 준비했던 경험이 떠올라, 합격 후기와 팁을 적어보려고한다. 사실 이전 블로그에서 작성한적이 있긴한데, 싸피셜을 겸업하면서 썼다보니 개인적으론 좀더 날것으로 쓰고싶어 다시 써보려고 한다. TMI가 난무할 예정이다... 준비과정만 보고싶은 분들은 지원배경은 안읽으셔도 된다! 지원배경싸피를 처음 알게된건 대학시절, 코로나때였다. 학과선배가 6기를 다니고 있었다. 당시엔 지금과달리 이렇게 큰 기업에서 진행하는 부트캠프가 거의없었다...
서버이전을 고려한 Jenkins기반 아키텍처 개선(Feat. GithubActions)
·
프로젝트/빼곡
SEMENTO 프로젝트에선 Jenkins 기반의 CI/CD 로직을 구현했었다. 그런데 SSAFY 수료 이후, 우수작품 전시에 이 프로젝트를 올리고자 서버를 이전해달라는 요청이 왔다. 그래서 우리팀은 새로운 서버에 Jenkins 및 관련 스크립트, 그리고 Docker와 NginX설정 등을 다시 만들어야 했었다. 이 과정에서 반복작업에 불편함을 느꼈던 나는, 서버 이전을 고려한 아키텍처를 설계할 수는 없을까? 라는 고민을 하게 되었다. 결과적으로, 클라우드 기반 CI/CD 파이프라인 구축으로 서버 이관시의 비효율을 해결하고, 자동화 할 수 있었다. 기존 시스템의 비효율본격적인 설명에 들어가기 전에, 기존 시스템 아키텍처에 대해 설명해보고자 한다.  docker cp /home/.../config.proper..
라즈베리파이를 이용한 홈서버 구축
·
프로젝트/빼곡
나는 그동안 AWS 프리티어를 통해 프로젝트를 배포해왔다. 그러나 프리티어는 단 1년만 주어졌기에 현재는 프로젝트들이 전부 내려간 상태고, 대체제를 찾고자 오라클 서버, GCP 등을 고려해봤지만 가입과정의 오류, 결국 필연적인 과금의 위험성 등의 문제로 인해 최적의 선택지가 되어주진 못했다. 그러던중 친구가 '미니PC 같은걸로 홈서버를 만들어보는게 어때?' 라는 제안을 해왔고, 내가 만들었던 작은 프로젝트들을 올려두기에 딱 맞는 선택지라는 판단하에 실행에 옮기게 되었다.   무릇 백엔드 개발자라면 서버 하나쯤 있어야지!   서버 자원으로는 일반PC, 미니PC, 안드로이드 스마트폰 등 다양한 선택지가 존재한다. 나는 그중에서도 라즈베리파이를 선택했다! 아무래도 학부생 시절 임베디드 프로젝트등을 해왔다보니,..
JPA 엔티티 객체지향적으로 설계하기(테이블과 일대일 매핑은 그만!)
·
프로젝트/FindDog
과거 첫 웹개발을 배웠을땐 MyBatis로 백엔드를 개발했었다. DB와 데이터를 주고 받으려면 VO와같은 객체를 정의해두고, SQL문을 작성하는 방식이다. 다만 그 과정에서, 간단한 select문들도 매번 새로 정의해주는점이 불편하게 느껴졌고, 무엇보다 VO를 계속해서 만들다보니 이게 과연 객체지향적인 설계인가에 대한 고민이 생겼다. 그래서 조사한 결과, SQL Mapper인 MyBatis와는 달리, ORM으로 작동하는 JPA가 이러한 비효율을 해결해줄 수 있음을 알게되었었다. 백엔드단에 테이블 정보를 객체로 매핑함으로써, 기존의 SQL중심적 개발에서 객체중심의 개발로 전환할 수 있게 된 것이다! 이는 어마어마한 장점을 가져오는데, 개발 생산성과 유지보수에서 아주 큰 이점을 가진다. 특히 JpaRepos..
대용량 데이터의 느린 집계속도 문제 ELK로 해결하기
·
프로젝트/SEMENTO
기업 SEMES와의 연계프로젝트였던 을 개발하며 발생했던 문제중 하나였던 "느린 집계속도" 문제를 해결했던 방법에 대해 포스팅 해보려고 한다.(해당 프로젝트의 내용, 그리고 아키텍처 설계에 관해선 이전 포스팅에서 볼 수 있다.) 프로젝트의 초기 설정을 간단히 보고 가자면, AnyLogic이라는 시뮬레이션 툴이 OHT 물류 데이터를 생산한다. 이는 그대로 RDB에 저장되며, Spring에서 select 쿼리를 날림으로써 데이터를 집계하게 된다.  그리고 바로 여기서 문제가 발생한다.AnyLogic은 시간당 10만, 즉 하루 300만개의 데이터를 생산하는데, 실제 시스템에선 한달이 넘는 기간에 대한 요청이 들어올 수 있다. 이경우 select쿼리가 수행되는데 아주 오랜 시간이 걸린다.   RDB의 Full-..
대용량 데이터 집계 아키텍처 설계
·
프로젝트/SEMENTO
SSAFY에서 좋은 기회로 기업 SEMES와의 연계프로젝트를 진행했었다.당시 전달받은 주제는 이었다. 간단하게 설명하자면, OHT라는 반도체 운송장비가 일을 하며 만드는 대용량 로그를 직접 학습시킨 AI를 통해 분석한다. 이를통해 단순 운송 로그만으로도 몇시에 정체가 일어났는지, 그리고 그 원인은 무엇인지 쉽게 알 수 있게 해주는 프로젝트다. 나는 이 프로젝트에서 AI를 제외한 모든 역할, 즉 백엔드/프론트엔드/인프라/디자인을 담당했고, 이과정에서 가장 신경썼던 부분중 하나가 바로 오늘의 주제, "아키텍처 설계" 이다. 최종적인 아키텍처 설계도는 몇가지 문제상황을 마주치면서 크게 수정되었다, 자세한 내용은 다음과 같다.  1. AnyLogic 시뮬레이터로 발생하는 실시간 데이터 보안상 문제로 직접 공장 ..
컴포넌트 주도 개발
·
프로젝트/척척약사
는 AI를 활용한 조제약 분석 웹으로, Vue.js를 통해 개발했었다. 당시 백엔드, 프론트엔드, 디자인을 모두 맡고, 기술리더 역할까지 일임했었는데, 프론트엔드가 가장 힘들었다ㅎㅎ... 아무래도 백엔드에 비해서는 경험이 부족한데다가, 이전 프로젝트에 비해 화면도 굉장히 많았다. 하지만 팀원들을 도우면서 가장 많이 성장하기도 했다.  당시 내가 단독으로 디자인한 UI이다. 60개에 달하는 화면....디자인도 힘들었지만, 진짜 문제는 개발이었다. 어떻게해야 짧은 시간안에 이 모든 화면을 구현할 수 있을까?그때 생각한게 바로 컴포넌트 주도 개발(CDD)였다. 컴포넌트 주도 개발은 앱의 UI를 재사용 가능한 컴포넌트로 쪼개어 개발하는 방식이다. 이를 통해 UI를 더 효율적으로 관리하고, 재사용성과 유지보수성을..