본문 바로가기

좋은 코드란 무엇일까? 해당 포스팅의 내용은 바뀔 수 있으며 온전히 작성자 본인의 의견으로 작성되지 않았으나 개발에 대한 기준을 잡고 좋은 코드가 무엇인지에 대해 지속적으로 고민하기 위하여 작성되었습니다. 다양한 사람들의 의견을 참고하여 작성 중입니다. 좋은 코드란? 읽기 쉬운 코드 주석이 있으면 편할 수 있으나 코드와 함께 같이 업데이트되지 않는 경우가 있음, 문화적 배경이나 사용 언어에 따라 사용 변수 및 논리 흐름의 '읽기 쉬움'에 대한 기준이 다를 수 있음 테스트가 쉬운 코드 중복이 없는 코드 좋지 않은 코드가 발생하는 경우 쓰지 않게 된 코드(Dead code) 응급처치를 한 코드 : 억지로 특정 목적을 위해 수정한 코드(기술부채) 적절한 추상화가 이루어지지 않았을 경우 좋은 코드를 위해 고려해야할 점 ..
[CS]OAuth란? OAuth란? 사용자가 어떤 애플리케이션을 이용할 때, 외부 서비스의 API를 이용하여 로그인 하도록 해주는 것(네이버 아이디로 로그인 등) 배경 OAuth가 사용되기 전에는 보안이 취약한 구조 각 애플리케이션이나 웹 사이트마다 개별적인 인증 방식으로 아이디와 비밀번호를 사용하여 로그인(사용자 불안감) OAuth는 제각각인 인증방식을 표준화한 것으로 인증을 공유하는 애플리케이션끼리는 별도 인증과정 불필요 과정 Access Token : 임의의 문자열 값으로 이 토큰을 발급해준 서비스만 알 수 있다, 이 토큰값과 관련된 고객의 정보를 우리는 해당 서비스에 요청할 수 있다. 해당 서비스는 이 토큰을 검증하고, 발급된게 맞다면 해당 고객의 정보를 넘겨준다. 고객이 해당 서비스(네이버)에 로그인하면 네이버는 A..
[CS] XSS와 CSRF 비교 사이트 간 스크립팅(XSS: Cross-Site Scripting) 해커가 공격하려는 사이트에 스크립트를 넣는 기법, 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 발생 사용자의 정보(쿠키, 세션 등)가 탈취되거나, 비정상적인 기능을 수행하게 하거나 할 수 있음 주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어짐 예를 들어 HTML이 포함된 내용을 게시할 수 있다면 문자의 크기와 색상을 바꿀 수 있는 등의 이점이 있지만 공격자의 의도대로 임의의 스크립트(간단한 프로그램)을 게시할 수도 있게 됨 공격자가 작업한 웹 사이트 게시물을 이용자가 조회하면, 취약점이 있는 다른 웹 사이트에 자동으로 스크립트가 게시되고 실행 됨 메일, 닉네임에 코드를 심기도..
[알고리즘] DFS와 BFS DFS(Depth-First Search, 깊이 우선 탐색) 그래프 탐색 임의의 노드에서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법 구현이 너비 우선 탐색(BFS) 보다 간단함, 단순 검색 속도는 너비 우선 탐색(BFS) 보다 느림 전위 순회 등 트리 순회는 모두 DFS의 한 종류 해가 없는 경우에 빠질 가능성이 있음 깊이 우선 탐색은 해를 구하면 탐색이 종료되므로, 구한 해가 최단 경로가 된다는 보장이 없음 어떤 노드를 방문했었는지 여부를 반드시 검사 해야 한다(check, visited 등) 1)스택을 사용 2)재귀사용 예시 프로그래머스 여행 경로 링크 BFS(Breadth-First Search, 너비 우선 탐색) 그래프 탐색 두 노드 사이의 최단 경로 혹은 임의의..
[네트워크]Web 서버와 WAS 차이 WEB 서버 HTTP 프로토콜을 기반으로 하여 웹 브라우저(클라이언트)의 요청에 응답 주로 정적 페이지인 HTML, 이미지, CSS, 자바 스크립트 파일을 웹 클라이언트에 제공할 때 사용 동적인 컨텐츠 제공을 위한 요청을 WAS에 전달(WAS가 처리한 결과를 클라이언트에게 전달) 예시 : Apache, Nginx, llS 등 WAS(Web Application Server) 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어(소프트웨어 엔진, 프레임워크) 웹 서버 + 웹 컨테이너 웹서버는 주로 캐시 기능, 프록시 기능 등 웹 클라이언트와 직접 연관된 일들을 처리하지만 WAS는 DB 조회나 다양한 로직 처리 등 어플리케이션과 관련된 기능을 수행 예시 : Tomcat, ..
[CS]디자인 패턴 디자인 패턴이란? 확장성, 유지보수성 등이 좋은 코드를 설계하기 위한 일종의 소프트웨어 설계 디자인 방법론 디자인 패턴의 종류 GoF 디자인 패턴 : 디자인 패턴을 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류 생성 : 객체 생성에 관련된 패턴 구조 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴 행위 : 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴 Singleton 패턴 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴 Strategy 패턴 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴 Template Method 패턴 어떤 작업을 처리..
[cs]함수형 프로그래밍이란?(객체지향 프로그래밍) 함수형 프로그래밍이란? 프로그래밍 패러다임 명령형 프로그래밍 애플리케이션의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 방식, 어떻게 할 것인지 표현 (상태와 상태를 변경시키는 관점, 명령을 통해 어떤 동작을 할지에 대한 표현) 절차지향 프로그래밍(순차적으로 위에서 아래로 진행되듯 표현), 객체지향 프로그래밍 선언형 프로그래밍 무엇을 할 것인지 표현(모든 동작에 대한 기능을 전부 선언하고 무엇을 할지 표현) 논리적 프로그래밍(논리 문장을 이용하여 프로그램을 표현하고 계산을 수행하는 개념), 함수형 프로그래밍 객체지향 프로그래밍 상태(변수)와 행동(메소드)으로 이루어진 객체로 레고 블럭을 쌓듯 프로그래밍을 짜는 것. 컴퓨터의 사고방식에 따라 짜인 절차지향 프로그래밍에 비해 사물과 같이 하나의 ..
[CS]TDD란? TDD란? Test Driven Development :테스트 주도 개발 개발을 한 후 테스트를 진행하는 일반 개발방법과는 달리 테스트를 먼저 만들고 테스트를 통과하기 위해 개발을 진행해 나가는 것 결정과 피드백 사이의 갭을 조절하는 것이 핵심 TDD가 유용한 경우? 불확실성이 높을 때(= 예상하기 어렵거나 변동성이 높은 개발을 진행할 때) 개발하는 중에 코드를 바꿔야 하거나 내가 아닌 다른 사람이 유지보수를 하게 될 경우 등 테스트 코드에는 개발자의 고민 과정이나 결정 과정이 나와있고 테스트 코드를 통해 협업이 쉬워질 수 있다 TDD의 단점과 한계 2개의 코드를 작성해야 하므로 개발 시간이 늘어난다. TDD 개발 방법 자체가 낯설고 어렵다.