전체 글 69

[회고] 2021년 회고록

2021년 회고록 2021년은 첫 회사에 입사를 했고, 회사 적응 및 실력을 상승시키기 위해 집중을 했다. 2021년 3월에 입사하여 3월 ~ 6월 검색엔진 R&D를 진행했고, R&D 결과가 좋아 7월 ~ 12월동안 검색엔진 개선 프로젝트를 진행했고, 실제 라이브에 적용하는 작업까지 완료했다. (프로젝트에 대한 회고는 따로 정리할 예정이라, 2021년도 큰 틀에서 작성해보자!) 🌕 2021년의 좋았던 점 1. 개발자로서의 나 입사 초 3월과 비교했을 때, 지금의 나는 성장했다. 스스로 만족할만한 성장은 아니지만(난 아직 부족하다/배고프다 ㅎㅎ), 3~6월 R&D기간에 개발하지 못한 내용을 최근 하루만에 해결/개발하는 모습을 보며 실력이 늘긴 했나보구나 라는 생각이 들었다. 또, 회사생활 하면서 스터디도 ..

회고록 2022.01.02

[클린 아키텍처] 2부. 벽돌부터 시작하기 : 프로그래밍 패러다임

🎯 프로그래밍 패러다임 : 3가지 패러다임 구조적 프로그래밍 객체지향 프로그래밍 함수형 프로그래밍 ❗ 구조적 프로그래밍 1) 탄생과정 "데이크스트라"는 모듈을 증명 가능하게 하는 바로 그 제어 구조가 모든 프로그램을 만들 수 있는 제어 구조의 최소 집합과 동일하다는 사실을 발견했다. (최소 집합은 순차, 분기, 반복 3가지로 표현할 수 있다는 것) 그렇기에 우리는 모두 구조적 프로그래머이며, 선택의 여지는 없다. 2) 기능적 분해 모듈을 증명 가능한 더 작은 단위로 재귀적으로 분해할 수 있게 되었고, 결국 모듈을 기능적으로 분해할 수 있음을 뜻한다. 3) 엄밀한 증명은 없다. 무언가가 올바른지를 입증할 때 사용하는 전략에 유클리드 방식 같이 수학적인 증명만 있는 것은 아니다. 상당히 성공한 또 다른 전략..

개발서적 2021.12.23

[클린 아키텍처] 1부. 소개

🚪 들어가기. 왜 클린 아키텍처를 읽으려고 하나? 입사한지 7개월차. "과연 잘 짠 코드는 무엇인가?" 의문이 생겼다. 누군가 알려주는 사람은 없었고,,, 혼자 해결해 나가야 했고,, 그러던 중 책을 추천해주었다! 이 책을 읽고 진정한 개발자로 거듭나자! 🎯 소프트웨어 아키텍처의 목표는? 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. 새로운 기능을 추가할 때, 비용이 증가한다면 나쁜 설계이고, "단순명료"해야 좋은 설계이다. 🔅 소프트웨어 개발의 진리 빨리 가는 유일한 방법은 제대로 가는 것 명심하자! 자신을 과신한다면 재설계하더라도 원래의 프로젝트와 똑같이 엉망으로 내몰린다. 🪄 소프트웨어 개발자가 알아야 하는 2개의 가치 1. 행위 - 대부분의 개발자는 어떤 요구사항을 ..

개발서적 2021.12.12

[JAVA] 1주차 - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

👻 자바가 만들어지게 된 배경 자바는 기본적으로 C/C++과 비슷하지만 C/C++을 사용하면서 나타나는 복잡하고 안전하지 않은 문제를 해결하고자 했다. 초기에 자바가 지향한 바로는 multiple host architecture 와 secure으로 한 번 쓰고 어느 곳에서도 실행할 수 있는 것을 목표로 했다. (Write Once Run Anywhere) 자바로 개발된 프로그램은 CPU나 운영 체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서 어디서나 실행할 수 있으며 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다. 🙄 JVM이란 무엇인가? 정의 : 자바 가상 기계(JVM : Java Virtual Machine)로서 자바 바이트코드를 실행할 수 있는 주체 설계자 : 제임스 고..

LANGUAGE/JAVA 2021.10.10

[JAVA] 정규표현식

📋 정규 표현식 문법 정규 표현식 역할 ^ 정규식의 시작 $ 정규식의 끝 . 임의의 한 문자 ? 앞의 문자가 하나 있거나 없을 수 있다 * 앞의 문자가 하나도 없거나 무한히 많을 수 있다 + 앞의 문자가 하나 있거나 무한히 많을 수 있다. {} 문자가 나오는 횟수를 말한다. - {n} : 앞의 문자가 정확히 n번 나온다. - {n,} : 앞의 문자가 적어도 n번 나온다. - {n,m} : 앞의 문자가 적어도 n번, 그러나 m번 보다는 안나온다. (= 앞의 문자의 빈도수가 n~m 사이) () 하나의 문자로 취급 🔤 문자 클래스 [abc] a,b or c [^abc] a,b,c 제외 [a-zA-z] a~z 또는 A~Z 사이의 문자를 포함하고 있는지 확인 ( "-" : 범위를 지정 ) [a-d[m-p]] a-..

LANGUAGE/JAVA 2021.09.11

[Spring] DAO/DTO/VO/Entity 란?

1️⃣ DAO(Data Access Object) Data Access Object의 약자로 풀어 해석하면 Data에 직접 Access하는 객체를 의미한다. 다시 말하면, 실제 DB에 접근하여 CRUD하는 객체를 말한다. ex) repository package에 해당한다. JPA의 경우 JPARepository를 사용하는 경우가 DAO의 예시라고 생각하면 된다. public interface ChattingLogRepository extends MongoRepository { public ChattingLog findAllByRoomIdx(Long roomIdx); public List findByRoomIdx(Long roomIdx); } 2️⃣DTO(Data Transfer Object) 계층간 데..

SERVER/Spring Boot 2021.08.24

[Spring] 로그 남기기 - Log4j / SLF4J / Logger

Spring Boot 코드를 보면 @SLF4J 어노테이션을 본 적이 있을 것이다. Lombok에서 @SLF4J를 써본 사람이라면, 로그 관련된 어노테이션이라는 것을 알 수 있을 것이다. 그렇다면 SLF4J는 무엇이고 Log4j, Logger은 무엇일까? 👍🏻 로그의 중요성 프로그램에서 로그를 작성해두면, 어떤 동작을 하고 있는지 혹은 어느 부분에서 에러가 났는지 쉽게 파악할 수 있다. 특히나 오류가 발생했을 때, 어떤 함수 호출에서 문제가 있었는지/에러 메세지가 무엇인지, 어떤 값이 들어갔는지 등을 알 수 있기 때문이다. 단, System.out.prinln()을 사용하여 로그를 찍지 말자. 운영할 때는 전혀 사용되지 않고, 성능에 문제가 발생한다. 1️⃣ SLF4J 란? SLF4J는 Simple Log..

SERVER/Spring Boot 2021.08.24

[ElasticSearch] ElasticSearch 인덱스 생성, 조회, 삭제 명령어 살펴보기

TEST 환경 ES 버전 : 7.11.2 📌 ElasticSearch의 인덱스 조회, 생성, 삭제 명령어 1) ElasticSearch Cluster 상태 확인 명령어 curl --location --request GET 'http://localhost:9200/_cat/health?v' 결과 2) 인덱스 조회 명령어 curl --location --request GET 'http://localhost:9200/_cat/indices?v' 결과 3) 인덱스 생성 명령어 curl --location --request PUT 'http://localhost:9200/books(생성할 인덱스 작성)' 결과 { "acknowledged": true, "shards_acknowledged": true, "inde..

ElastciSearch 2021.06.13

Khaiii - 카카오 형태소 분석기( 설치 방법, 정의 등 )

khaiii란? - 카카오에서 개발한 세번째 형태소 분석기 - CNN(Convolutional Neural Network) 신경망 알고리즘 사용 Khaiii 설치 방법 ※ 조건 1. Khaiii는 Window환경을 지원하지 않는다. 2. C++로 개발되었기 때문에 gcc/clang 컴파일러가 필요하다. ※ 빌드 툴 pip install cmake CMake 3.10 이상 필요 CMake란? CMake는 소프트웨어를 빌드, 테스트 및 패키징하기 위해 설계된 크로스 플랫폼 오픈 소스 툴 제품군 CMake는 간단한 플랫폼과 컴파일러 독립 구성 파일을 사용하여 소프트웨어 컴파일 프로세스를 제어하고 사용자가 선택한 컴파일러 환경에서 사용할 수 있는 네이티브 메이크 파일과 워크스페이스를 생성하는 데 사용된다. ※ ..

ElastciSearch 2021.05.16

[ElasticSearch] nori analyzer 옵션 살펴보기

Nori Analyzer 란? ElasticSearch에서 공식적으로 제공하는 한글 형태소분석기 mecab-ko-dic 사전을 재가공 하여 사용 1개의 토크나이저와 2개의 토큰 필터를 가지고 있음 ElasticSearch에서 사용가능한 한글 형태소 분석기 종류 1. Nori Analyzer 2. 아리랑 3. 은전한닢 (seunjeon) 4. Open Korean Text nori_tokenizer decompound_mode 복합 토큰을 어떻게 처리할지 결정하는 방식 정하기 none 가거도항 가곡역 이런 것들을 나누지 않고 그대로 사용한다는 것 discard 가곡역 -> 가곡, 역 (최소한의 단위로 나누는 느낌) default mixed 가곡역 => 가곡역, 가곡, 역 discard_punctuation..

ElastciSearch 2021.04.01