2024/03 22

[백엔드 기술 면접 대비] RDBMS의 정규화, Primary Key, Foreign Key

내용 추가 예정 💡 3. RDBMS의 정규화에 대해 설명해주세요. RDBMS 정규화란? 관계형 데이터베이스의 설계에서 데이터를 중복 없이 효율적으로 저장하기 위한 과정 -> 중복을 최소화 왜 필요한가? 이상 현상이 발생할 수 있기 때문 이상현상이란? 정규화가 되지 않은 DB의 테이블에 어떠한 작업을 할 때 비합리적인 문제들이 발생하는 현상 테이블에 불필요한 데이터가 함께 들어가야 하는 삽입 이상, 테이블에서 삭제를 원치 않는 데이터도 함께 삭제가 되는 삭제 이상, 중복된 데이터에서 어떤 특정한 부분만 수정되어 값이 모순을 일으키는 갱신 이상이 있다. 이러한 이상 현상을 막기 위해 RDBMS의 정규화가 필요하다. 💡 4. Primary Key, Foreign Key에 대해 설명해주세요. Primary Ke..

[백엔드 기술 면접 대비] HTTP 메서드, GET, POST의 개념과 데이터 흐름

💡 5. HTTP 메서드에 대해 설명해주세요. HTTP 메서드는 요청과 응답에 관한 전송 방식을 말한다. 총 9가지가 있는데 보통 GET, POST, PUT, PATCH, DELETE를 많이 사용한다. GET: 리소스의 표시를 요청. 게시글의 목록을 조회하는 것 POST: 요청한 데이터를 처리. 게시글 작성 PUT: 리소스 전체 변경. 리퀘스트에서 모든 부분을 변경 PATCH: 리소스 부분 변경. 리퀘스트에서 일부만 변경해도 전체 처리 DELETE: 리소스 삭제. 게시글 삭제 💡 15. GET, POST의 개념과 함께 데이터 흐름에 대해서 설명해주세요. 추후 작성 예정

[DB] RDBMS, SQL, NoSQL

DBMS 데이터베이스 관리 시스템 데이터베이스를 조작하는 소프트웨어 데이터베이스를 구축하고 효율적으로 데이터 검색 및 저장 기능 제공 RDBMS 관계형 데이터베이스(관리 시스템) 키와 밸류의 관계를 테이블화 시킨 데이터베이스 SQL 관계형 데이터베이스를 관리하기 위해 설계된 프로그래밍 언어 MySQL sql을 사용하는 오픈소스의 관계형 데이터베이스 관리 시스템 NoSQL 기존의 관계형 데이터베이스보다 더 융통성 있는 데이터 모델, 데이터의 저장 및 검색에 특화 스키마가 필요없고 데이터 분산이 용이 단순 검색 및 추가 작업에 최적화된 기법 사용 -> 응답 속도나 처리 효율이 뛰어남!

🪩/기타 2024.03.29

[백엔드 기술 면접 대비] 프로세스, 쓰레드, 멀티 프로세스, 멀티 쓰레드

💡 23. 프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요. 프로세스 이전에 프로그램이라는 개념을 먼저 알아야 할 것 같았다. 프로그램이란? 하드 디스크에 저장된 코드 실행 파일 저장 장치에 저장되어 있는 정적인 상태 프로세스란? 실행 중인 프로그램이자 작업의 단위 더 정확히 말하면 프로그램을 실행하면 파일에 있던 코드의 데이터가 메모리에 저장되어 프로세스로 동작한다. 실행되기 위해 메모리에 올라와있는 동적인 상태 스레드란? 프로그램, 특히 프로세스 내에서 실행되는 흐름의 단위 프로세스의 여러가지 상태 중에서도 CPU에 작업 요청을 하는 실행 단위가 스레드 -> 프로세스와 스레드의 차이 프로세스 스레드 실행시키는 주체 운영체제 CPU 독립성 각각의 프로세스는 서로에게 영향을 미치지 않음..

도커(Docker), 메시지큐(Message Queue)

최종 프로젝트를 준비하며 팀원들과 기술 스택에 대해 이틀동안 이야기를 나누고 있다. 낯선 기술이 많아서 먼저 기술을 알아가는 시간을 가지기로 했다. 각자 배우지 않았던 기술을 한두개씩 담당해서 30분동안 공부해온 뒤 서로에게 알려주는 방식으로 진행해봤다. 나의 담당 기술은 도커와 메시지큐였고, 이때 정리한 내용을 올리려고 하는데 30분동안 정말 감만 잡은!! 감도 100% 잡은게 아니고 어떤 상황에 어떤 기술과 연계가 되는지 정도만 아주 대략적으로!! 담긴 내용이기 때문에 정보성 글보다는 그냥 개인 기록정도로 보는 것이 맞을 것 같다. 도커 컨테이너 기반의 오픈소스 가상화 플랫폼 여기서 컨테이너는 항구에서 볼수있는 그 컨테이너를 떠올리면 이해가 쉬울 것 같음 프로그램, 실행환경을 컨테이너로 추상화 동일한..

🪩/기타 2024.03.26

팀프로젝트: 칸반(Kanban) 보드_KPT 회고록

Keep 현재 만족하고 있는 부분 프로젝트 진행하다보니 완성도 있는 코드를 쓸 수 있게 되어서 좋았다 즉각적인 소통, 원활한 소통이 되어서 좋았다. 깃 사용하면서 커밋메시지 잘 날린거같고 체계적으로 깃을 사용해본거같아서 좋았습니다. 어려운 문제있을때 팀원들과 함께 해결이 가능해서 좋았다. 평소보다 복잡한 로직을 체험해볼수있어서 좋았다. Problem 불만인 부분 시간이 짧아서 불가피하게 지피티의 도움을 받았다. 좀 더 주체적으로 짤 수 있었다면 좋겠다. 사전에 계획한 기한을 엄수하지 못함. 코드 컨벤션을 설정해두지 않아 관련한 사소한 트러블이 많았음. 네스트 사용이 익숙치않아 가드나 전략 사용에 있어 어려움이 있었다. Try 해결책, 지금당장 가능한것 지피티보다 공식문서 활용하기. 더 노력한다... 더 ..

💻/프로젝트 2024.03.25

[Git] 체리픽(Cherry-Pick)

팀 프로젝트를 진행하다보니 dev 브랜치에 package.json 파일만 올리고 싶은데, 다른 코드는 아직 dev 브랜치에 올릴 수 있는 상태가 아니라 고민하게 되는 상황이 있었다. 팀원 분께서 체리픽에 대해 말씀해주셔서 찾아봤다. 체리픽은 a 브랜치에서 b 브랜치로 특정 커밋의 선택과 적용이 가능한 Git 기능 중 하나이다. (나같은 경우에는 혼자 작업 중인 feat 브랜치에서 -> dev 브랜치로) 전체 커밋이 아닌 개별 커밋을 선택할 수 있다는 특징 덕에 사용해보게 되었다. git log 먼저 git log 명령어로 올리고 싶은 커밋을 식별한다. (커밋 해시라고 하는 것 같다) git switch switch 명령어로 브랜치를 옮겨준다. (checkout도 가능하나 switch 권장) 나같은 경우에..

🪩/Git 2024.03.22

팀프로젝트: 칸반(Kanban) 보드_3

처음에 로그인 기능을 액세스 토큰만 리턴하는 로직을 작성했다가, 리프레시 토큰을 함께 받아서 쿠키에 저장하는 식으로 수정했다. 처음 해보는 기능이라 거의 24시간 넘게 매달려서 코드 작성을 겨우 끝냈고 이제 테스트를 해봐야한다…….. 너무 힘들었다…. 유저 기능도 이렇게 낑낑대면서 오랫동안 붙들고 있으면 다른 기능을 구현할 때는 어떻게 해야하는거지….. 우왕좌왕했던 모습이 주석에서 보이는 듯 하다 얼른 테스트해보고 문제 얼른 해결하고 노드메일러랑 회원정보 수정, 탈퇴를 구현해야 한다. 수정 탈퇴는 금방 하겠지 싶지만 이게 끝나면 다른 파트도 남아있기 때문에 얼른얼른 끝내야겠다 이미 완전 늦음!

💻/프로젝트 2024.03.21

팀프로젝트: 칸반(Kanban) 보드 _2

const payload = { email, sub: user.id }; // 토큰 페이로드에 "sub" 필드를 포함하는 것은 토큰이 발행된 엔터티에 대한 정보를 제공하여 권한 부여 결정을 용이하게 하는 웹 서비스의 일반적인 관행 return { access_token: this.jwtService.sign(payload, { expiresIn: '300s' }), refresh_token: this.jwtService.sign(payload, { expiresIn: '7d' }), }; 로그인하면 액세스 토큰만 나오는 코드를 짰다가 팀원 분들의 피드백을 받고 리프레시 토큰도 함께 받아서 쿠키에 담는 방식으로 수정중이다. 이제 쿠키부분 해결하고 노드메일러 부분 완성하고 회원정보 수정, 회원탈퇴도 구현해서..

💻/프로젝트 2024.03.20