banner image

CS 상식 19

함수형 프로그래밍에 대한 이해와 오해 (feat.절차지향, 객체지향)

'함수형 프로그래밍'은 함수형이라는 이름으로 인해 많은 오해를 불러일으킵니다. 가장 흔한 오해는 함수형 프로그래밍의 반대는 '객체 지향 프로그래밍'이라는 생각입니다. 이외에도 함수형 프로그래밍에 대한 오해는 꽤 많습니다. 그래서 오늘 이 글에서 함수형 프로그래밍이 무엇인지에 대해 설명하고, 관련한 오해를 풀어보려합니다. 먼저 함수형 프로그래밍과 관련한 여러 프로그래밍 관점들을 소개하겠습니다. 절차 지향 vs 함수형 vs 객체 지향✅ 절차 지향 프로그래밍 (Procedural Programming)핵심 개념: 프로그램을 순차적인 절차(명령의 흐름)로 구성하여 문제를 해결함.기반 구조: 함수(또는 프로시저)를 사용하여 코드를 구조화하되, 주로 전역 상태와 공유된 데이터를 중심으로 동작.대표 언어: C, P..

ESLint, Prettier 기초부터 실전 적용까지 - Node 개발자 필수 상식

개요ESLint는 정적 분석을 통해 코드 품질을 체크하는 도구로, 주로 코드의 문법적 오류나 불필요한 코드를 찾아내는 데 집중합니다. 반면, Prettier는 코드를 자동으로 포맷해서 일관된 스타일을 유지하는 데 도움을 줍니다. 그래서 Node 개발자들이 협업할 때는 이 둘을 같이 사용해 코드 품질과 스타일을 일관성있게 유지하는 것이 일반적입니다. ESLintPrettier설명코드 문법 오류, 버그 가능성 탐지 목적코드 스타일 일관성 유지 목적목적코드 안정성코드 가독성 간단한 예시를 통해 ESLint와 Prettier를 사용하는 이유를 알아보겠습니다.ESLint사용되지 않는 변수 찾기: 쓸데없는 변수 선언 피할 수 있음잘못된 함수 호출: 존재하지 않는 함수. 혹은 함수 호출 시 함수명을 잘못 사용한 부분..

HTTP 프로토콜에서 데이터 전송되는 방식 - JSON.stringfy(), JSON.parse()

HTTP 프로토콜 API를 하나 만들었다고 가정합니다. 보통 이런 API 응답 형식은 JSON이죠. 그럼 네트워크에 JSON 객체가 그대로 포함된채로 전달될까요? HTTP 요청과 응답 구조HTTP 프로토콜을 사용해 데이터를 주고 받을 때 요청와 응답 구조를 확인해봅시다.🔎 참고자료 HTTP 프로토콜 | 토스페이먼츠 개발자센터HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받는 서버-클라이언트 모델의 프로토콜입니다. 쉽게 설명하자면 웹 브라우저가 서버와 통신하는 규칙이에요.docs.tosspayments.com 요청(Request)요청은 다음과 같은 구성으로 이루어집니다.요청 라인 (Request Line)요청 헤더들 (Request Headers)빈 줄요청 바디 (Re..

[DDD] 엔티티에 비즈니스 로직 작성하는 것에 대한 나의 생각

최근 OOP와 DDD 관련된 서적을 읽다 궁금한 점이 생겼습니다. 바로 엔티티 클래스와 서비스 클래스에 관한 내용인데요. 저는 기존에 개발 시 엔티티 클래스는 단순 데이터베이스와 매핑되는 클래스로만 이용했습니다. 그리고 모든 비즈니스 로직은 서비스 클래스에 구현했죠. 하지만 이럴 경우 엔티티가 단순한 데이터 구조체로만 사용된다는 아쉬움이 발생합니다. 그래서 도메인 주도 개발이라는 개념이 부상했습니다. 도메인 주도 개발 관점에서는 복잡한 비즈니스 로직만 서비스 클래스에 넣고 도메인 모델(엔티티)과 관련된 비즈니스 로직은 도메인 모델 클래스에 구현해 이런 아쉬움을 해결합니다.저도 이런 내용을 토대로 저의 코드 일부를 수정해보려 했는데요. 이때 의문점이 생겼습니다. 내용은 아래와 같습니다. 엔티티에 비즈니스 ..

저장 장치의 기본 개념 - 디스크, 드라이브, 파티션, 파일 시스템에 대해 알고가자( 리눅스 vs 윈도우 )

저는 aws ec2 볼륨 크기를 늘리면서 디스크, 파티션, 파일 시스템 등의 개념에 대해 잘 알고 있지 못해 곤란했던 적이 있습니다. 이는 컴퓨터를 이해하는데 기본적이고 중요한 개념이므로 확실히 알고가야겠다는 생각이 들었습니다 이때 제가 조사했던 디스크 관련 개념들을 공유해보겠습니다. 디스크, 파티션, 파일시스템이란?지구를 통해 비유하겠습니다.디스크 --> 지구파티션 --> 국가파일 시스템 --> 국가별 법디스크(Disk)는 컴퓨터에 존재하는 저장 장치를 의미합니다. 즉, HDD 혹은 SDD같은 물리적인 저장 장치입니다. 파티션(Partition)은 이런 디스크가 여러 개로 나뉘어진 부분들을 의미합니다. 마치 지구가 여러 국가로 구성된 것과 같습니다. 하지만 여기서 조금 다른점은 존재합니다. 파티션은 물..

[JS] 값을 복사하는 여러 방법과 차이점 - 얕은 복사 / 깊은 복사

프로그래밍 언어를 사용하다보면 변수를 선언하고 해당 변수값과 같은 값을 가지는 다른 변수를 선언하고 싶은 경우가 많이 생깁니다. 하지만 이때 값을 복사하는 방식에 따라 차이점이 존재하고 이로 인해 예기치 못한 문제가 발생할 수 있습니다. 오늘은 자바스크립트에서 값을 복사하는 방법들과 그 차이점에 대해 알아보겠습니다.( 시작하기에 앞서 기본적으로 자바스크립트의 데이터 타입에 대한 간단한 이해가 필요합니다. ) [Javascript] 원시 타입, 참조 타입에 대한 이해원시 타입(Primitive Type)이란?✅ 정의원시 타입 데이터는 값 자체를 저장하는 데이터 타입을 의미합니다. 예를 들어, 'A'라는 변수에 '10'이라는 값을 지정한다면 스택 메모리에 'A'라는 변수는 '10'이sparkit.tistor..

[보안] .env 무작위 노출 공격. 당신의 서버는 안전한가요?

저는 현재 AWS EC2에 간단한 애플리케이션을 배포해 개발 연습중입니다. 이때 NGINX를 웹 서버로 활용하고 있는데요. 이때 NGINX 로그에 의심스러운 요청 로그( GET /.env HTTP/1.1 ... )가 찍혀 있어 이에 대해 조사한 결과 이는 해커가 해킹을 시도한 것이라고 하네요. 이 공격에 대해 간단하게 요약하자면 하나만 걸려라 공격입니다.보통 개발자들이 개발하는 과정에서 사용하는 환경 변수, 비밀번호 등의 민감한 정보는 .env 혹은 credentials, secret 등의 이름의 파일로 저장되는 경우가 많습니다. 해커는 이런 점을 이용해서 서버에 .env 혹은 credentials, secret 같은 파일명에 대한 GET 요청을 무작위로 보냅니다. 만약 서버에서 이런 민감한 정보가 담긴..

CS 상식/보안 2025.01.11

[면접 단골 질문] 동시성과 병렬성 차이는 무엇인가요?

개발자 기술 면접에서 흔하게 나오는 질문 중 하나이죠. 동시성과 병렬성의 차이를 묻는 경우가 꽤 있습니다. 해당 질문은 컴퓨터가 2개 이상의 프로그램들을 모두 실행하려 할 때 각 프로그램이 동작하는 방식을 이해하고 있는지를 알기 위한 질문이라고 생각합니다. "동시에 실행", "병렬로 실행" 똑같은거 아니야?개인적으로 '동시에 실행하다' 혹은 '병렬로 실행하다'는 한글 그 자체로 해석했을 때 같다고 밖에 느껴지지 않았습니다. 많은 분들이 저와 공감하실 것이라고 생각합니다. 그래서 동시성과 병렬성 두 개념을 이해하는데 꽤 힘들죠. 동시성은 우리가 알고 있던 동시성이 아니야소프트웨어에서의 동시성은 일상적인 단어로 사용되는 동시성과 다르기 때문에 이해하기 어렵습니다. 우리는 일반적으로 A 사건과 B 사건이 동시..

HTTPS 사용을 위해 Nginx에서 certbot 활용하기

애플리케이션을 실제로 배포할 때는 보안을 위해 http 대신 https 사용을 무조건해야합니다. 이때 웹 서버로 많이 사용되는 nginx에서 certbot을 활용하면 간단하게 https 설정을 적용할 수 있습니다. Certbot은 Let's Encrypt의 공식 클라이언트로 SSL/TLS 인증서 발급과 관리 기능을 제공합니다. 이런 Certbot을 활용한 HTTPS 적용 방법에 대해 공유합니다. HTTPS 적용하는 방법Certbot 설정1. certbot 설치하기sudo apt-get updatesudo apt-get install certbotsudo apt-get install python3-certbot-nginx # nginx 플러그인 2. SSL/TLS 인증서 발급하기sudo certbot ce..

CS 상식/보안 2025.01.03

객체 지향 프로그래밍(OOP): 내 방식대로 개념 적용해보기 - feat. 객체지향의 사실과 오해 책 리뷰

개발을 공부해 본 사람은 한 번쯤은 듣게 되는 객체 지향 프로그래밍(Object-Oriented Programming, OOP). 굉장히 친숙하면서도 정확히 이해하기에는 모호한 개념이라고 생각하는데요. 이를 더 깊이 이해하기 위해'객체지향의 사실과 오해: 역할, 책임, 협력 관점에서 본 객체지향'이라는 책을 읽고 나름대로 느낀 점들을 정리해보려 합니다.  '객체지향의 사실과 오해' 리뷰우선 내용을 전체적으로 요약하지는 않을 것입니다. 모든 내용이 하나하나 정확히 기억나지는 않을뿐더러, 전체적으로 코드 수준에서 명확하게 설명하는 방식보다는 추상적이고 모호한 형태로 설명하는 방식이 주로 사용되었다고 생각해 내용을 요약하는 것이 크게 도움이 되지 않다고 생각하기 때문입니다(개인적인 생각입니다)... 그래서 ..