1. git에서 pull request merge의 3가지 전략

https://ssocoit.tistory.com/273#2._%EC%84%B8_%EA%B0%80%EC%A7%80_%EB%A8%B8%EC%A7%80_%EC%A0%84%EB%9E%B5 참고

https://im-developer.tistory.com/182 참고 

  • Create a merge commit 
    • 기본 머지
    • 하나의 브랜치와 다른 브랜치의 변경 이력 전체를 합친다.
    • 각각의 브랜치에 남은 커밋을 히스토리에 그대로 남긴다.
    • 어떤 브랜치에서 어떻게 만들어져서 머지가 되었는지 상세하게 파악할 수 있다. 
    • 히스토리가 자세하게 남아서 보기 어려울 수 있다는 단점이 있다.
  • Squash and merge
    • 개발용 브랜치에 있던 내용들을 하나로 합쳐서 중앙 브랜치에 하나의 커밋으로 저장하는 전략
    • 기존 변경사항들이 어떻게 변했는가보다 머지가 되었다에 좀 더 집중한 전략
    • 남아있는 정보량이 비교적 적기 때문에, 개발용 브랜치에서 언제 어떤 코드를 바꿨는지에 대한 정보를 잃을 수 있다는 단점이 있다.
  • Rebase and merge
    • 이미 존재하는 Rebase라는 기능을 이용해서 브랜치를 머지하는 것이다.
    • 모든 커밋들이 합쳐지지 않고 각각 main 브랜치에 추가된다.
    • 히스토리의 base를 직접 옮겨서 처리하는 방식이기 때문에 개발용 브랜치에서 변경한 내용을 중앙 브랜치에서 변경한 것처럼 바꿔버릴 수 있다.
    • 어느 시점에 머지가 되었는지 나중에 판단하기 어렵다.

2. 테스크 코드 (필요성, 장단점)

  • 테스트 코드란 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드
  • 필요성 : 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있고, 코드 수정이 필요한 상황에서 유연하고 안정적인 대응을 할 수 있다. 이는 서비스의 품질 및 안정성과 직결되어 있다.
  • 장점
    • 코드 및 서비스의 품질을 향상시킨다.
    • 개발자가 더 빠르게 기능의 동작 방식을 이해하는 데 도움이 되는 문서로 작용할 수 있다.
    • 리팩토링 작업을 진행할 경우 이전에 작성한 테스트 코드를 통해 서비스에서 동작하는 기능에 대한 안정적인 확장 및 품질 향상이 가능하다.
  • 단점
    • 테스트 코드 작성은 단순한 작업이 아니므로 개발 시간이 늘어날 수 있다.
    • 서비스의 기능이 변경되거나 확장될 때마다 테스트 코드로 함께 수정해야 하기 때문에 추가적인 유지보수 비용이 발생할 수 있다.
    • 오버 엔지니어링 발생 : 개발 과정에서 소프트웨어의 요구사항보다 더 복잡하고 정교하게 코드를 작성하는 것
    • 테스트 코드 작성 방법을 익히는 데 시간이 소요된다.

3. 동기 vs 비동기 vs 블로킹 vs 논블로킹

https://www.youtube.com/watch?v=oEIoqGd-Sns 참고 

  • 동기
    • 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미
  • 비동기
    • 시작, 종료가 일치하지 않으며 끝나는 동시에 시작을 하지 않음을 의미 
  • 블로킹
    • 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
  • 논블로킹
    • 다른 주체의 작업에 관련없이 자신의 작업을 하는 것 
  • 블로킹 vs 논블로킹은 다른 주체가 작업할 때 자신의 제어권이 있는지(논블로킹) 없는지(블로킹)로 볼 수 있다.
  • 동기와 비동기는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지(동기) 아닌지(비동기)로 판단할 수 있다. 
  • 4가지 조합
    • 동기+블로킹 : 작업을 넘겨주고 그 작업이 끝날 때까지 대기했다가 작업이 완료되고 제어권과 결과가 넘어오면 바로 처리를 한다. 예) 자바에서 입력 요청을 할 때 사용한다. (입력을 받을 때까지 다른 작업을 하지 않고 기다렸다가 입력을 받으면 처리)
    • 동기 + 논블로킹 : 자신의 제어권을 가지고 일을 하다가 중간중간에 다른 작업에 결과가 나왔는지 물어보다가 결과가 나오면 가지고 와서 업무를 처리한다. 예) 해당 데이터를 가져올 때까지 유저에게 정보의 로드율이 얼만큼인지 보여줄 때 사용한다.
    • 비동기 + 블로킹 : 다른 작업을 할 동안 결과에는 관심이 없지만 기다렸다가 결과를 가지고 나중에 처리한다. 
    • 비동기 + 논블로킹 : 다른 작업이 진행될 동안 자신의 작업을 이어서 하다가 다른 작업이 끝나서 결과가 넘어오면 그 결과를 나중에 처리한다.

4. TCP의 3-way handshake란?

  • TCP 프로토콜을 이용해서 통신하는 프로그램은 데이터를 주고받기 전에 먼저 연결을 진행하는 과정을 말한다.
  • SYN : 연결 설정. 시퀀스 번호를 랜덤으로 설정하여 세션을 연결하는 데 사용
  • ACK : 응답 확인. 패킷을 받았다는 것을 의미
  • LISTEN : 포트가 열린 상태로 연결 요청 대기 중
  • SYN_RECV : SYNC 요청을 받고 상대방의 응답을 기다리는 중
  • 동작방식
    • Client → SYN → Server : 클라이언트가 서버에게 접속을 요청하는 SYN 플래그를 보낸다.
    • Server → SYN + ACK Client : 서버는 Listen 상태에서 SYN이 들어온 것을 확인하고 SYN_RECV 상태로 바뀌어 SYN+ACK 플래그를 클라이언트에게 전송한다. 그 후 서버는 다시 ACK 플래그를 받기 위해 대기상태로 변경된다.
    • Client → ACK → Server : SYN+ACK 상태를 확인한 클라이언트는 서버에게 ACK를 보내고 연결 성립이 된다.

5. 함수형 프로그래밍의 특징 및 장점(명령형 프로그래밍과 비교)

  • 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임
  • 순수 함수
    • 동일한 입력에는 항상 같은 값을 반환한다.
    • 함수의 출력은 오로지 그 함수에 입력된 값에만 의존한다.
    • 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 한다.
  • 불변성
    • input의 불변성을 유지해야 순수함수의 순수성 유지가 의미가 있다.
  • 참조의 투명성
    • 함수 외부에 의존하는 코드가 없고, 함수 사용자 입장에서는 유효한 매개변수만 전달하면 된다.
    • 동일한 매개변수에 대해서는 항상 동일한 결과가 나온다,
    • 예외를 던지지 않는다.
    • 데이터베이스, 파일 시스템, 네트워크 등의 외부 기기로 인해 동작이 멈추지 않는다.
  • 장점
    • 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.
    • 머러티 코어 혹은 여러 연산 프로세스를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다.
    • 상태변화에 따른 부작용에서 자유로워지기 때문에 순수하게 기능 구현에 초점을 맞추어 설게할 수 있다.
함수형 프로그래밍 명령형 프로그래밍
상태 변경을 지양하고 불변성 유지 상태 변경 중심
외부 상태에 의존하지 않아 부작용 최소화 함수가 외부 상태에 의존해 부작용을 일으킬 가능성 높음
데이터의 불변성 강조 변수와 객체의 값을 자유롭게 변경 가능
상태 변이가 없고 부작용이 없으므로 병렬성와 동시성 쉽게 처리 상태 변이와 부작용이 많아 병렬성과 동시성 관리 어려움

6. 웹이란?

  • 전 세계 인터넷에 연결된 수많은 기기들이 서로의 정보를 공유하는 공간
  • 하이퍼텍스트로 표현되는 여러 문서들을 컴퓨터를 통해 모니터에 출력
  • 하이퍼텍스트는 HTML로 작성되며 HTTP 프로토콜을 통해 주고받게 된다.

'공부 > f-lab' 카테고리의 다른 글

f-lab 10주차  (0) 2024.05.23
f-lab 9주차  (0) 2024.05.19
f-lab 7주차  (0) 2024.04.30
f-lab 6주차  (0) 2024.04.24
f-lab 5주차  (0) 2024.04.16

+ Recent posts