공부 30

[SQL] 코딩테스트를 위한 쿼리문 및 문법 정리

SELECT 찾을 컬럼 COUNT와 같은 함수를 사용할 때는 AS로 컬럼 이름을 정할 수 있음 ORDER BY order by 뒤에 우선순위가 있는 열을 적음 다중정렬 : 순서대로 정렬의 우선순위를 의미하며 2가지 이상의 필드를 조합하여 정렬할 수 있음 -- NAME 오름차순, 같을 경우 DATE 내림차순으로 ORDER BY NAME, DATE DESC GROUP BY 집계함수와 함께 사용되어 결과를 지정한 컬럼에 따라 그룹으로 묶을 수 있음 -- 각 도시에 사는 사람이 몇명인지 계산하여 출력 SELECT COUNT(id) FROM customers GROUP BY country; LIMIT 결과 개수 제한 -- NAME 순으로 오름차순 정렬된 테이블 가장 위에서부터 2개의 레코드 결과만 가져옴 ORDE..

[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (주문과 할인 도메인 개발과 테스트 코드 작성)

* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다. 주문과 할인 도메인 개발 패키지 생성, 인터페이스 생성 여기서 좋은 단축키 F2, 아무곳에서나 누르면 오류가 난 Member로 바로 이동한다. 이동해서 alt + enter로 Member를 import 해주면 해결된다. 그런데 여기서 문제가 나는 hello.core 아래에 작성한 member 패키지를 IntelliJ가 alt + enter로 찾지 못했다. 그래서 수동으로 입력해줬는데 설정을 해줘야 하는게 있는지... 찾아봐야겠다. 또 IntelliJ의 경우 주석을 입력하기 위해 /**를 치고 enter하면 자동으로 params와 return 주석이 생성된다. 정액 할인 정책을 위한 클래스를 생성한다. 주..

공부/Spring 2022.10.01

[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (주문과 할인 도메인 설계)

* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다. 주문과 할인 도메인 설계 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을수도 있다. (미확정) 도메인 도메인을 살펴보면 "역할과 구현을 분리"했기 때문에 자유롭게 구현 객체를 조립할 수 있게 설계했다. 덕분에 회원 저장소는 물론이고, 할인 정책도 유연하게 변경할 수 있다. 할인 정책과 주문 서비스 구현체 부분만 갈아끼울 수 있음 클래스 다이어그램..

공부/Spring 2022.09.27

[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (회원 도메인 개발과 테스트 코드 작성)

* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다. Package 생성 New - Package로 hello.core 밑에 member 패키지를 생성한다. Class 생성 이후 New - Class로 필요한 클래스들을 생성한다. Grade는 BASIC, VIP 두 가지 값 중 하나를 선택하는 Enum 타입으로 작성했다. 마찬가지로 Class와 Interface를 구분하여 생성한다. 아래는 member 클래스를 작성하는 과정인데 IntelliJ는 변수 선언 이후 Constructor를 편하게 생성할 수 있다. alt + insert 단축키를 사용하면 간편하다. 전체(Ctrl + A) 선택 후 OK를 클릭한다. 마찬가지로 Getter와 Setter도 생성해준..

공부/Spring 2022.09.22

[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (비즈니스 요구사항과 프로젝트 설계)

* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다. 비즈니스 요구사항과 설계 위와 같은 요구 사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하지 어려운 부분이다. 그렇다고 이런 정책이 결정될 때까지 개발을 무기한 기다릴 수도 없다. 이런 상황에서 우리는 앞에서 배운 객체 지향 설계 방법을 사용할 수 있다! 인터페이스를 맏늘고 구현체를 언제든지 갈아끼울 수 있도록 설계하면 된다. 참고로 현재는 순수 Java로만 개발을 진행하고 후에 Spring을 적용해본다. 회원 도메인 설계 도메인 협력 관계는 기획자들도 볼 수 있는 그림 아직 저장 방식이 확정되지 않은 상태이기 때문에, 메모리를 사용해서 개발을 진행하기로 결정한다. 간단한 메모리 저장소를 만..

공부/Spring 2022.09.21

[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (프로젝트 생성)

* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다. IntelliJ 강사님이 IntelliJ를 사용하신다고 해서 설치했다. 찾아보니 Community(무료)와 Ultimate(유료) 버전으로 나뉘어 있었는데 Spring을 사용하려면 무조건 Ultimate 버전이 좋다고 해서 고민하다가... 학생 인증을 하면 무료로 사용할 수 있다는 블로그를 발견하고 바로 따라했다. 현재 대학생 신분이 아니어도 학교 메일 계정으로 인증만 하면 가능하니까 너무 좋은 혜택!!! 환경 세팅 https://start.spring.io/ 에서 다음 설정으로 Spring Boot 파일을 다운받는다. 초반 강의에서는 스프링을 사용하지 않고 순수 Java로 코드를 짤 것이지만 환경 세팅..

공부/Spring 2022.09.19

[섹션 1] 객체 지향 설계와 스프링

* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다. Spring이란? Spring은 말 그대로 "봄"이라는 뜻에서 유래했다고 한다. 이야기는 좀 길게 설명해주셨지만 결론은 EJB라는 그 당시 점유율 독점 방식이 굉장히 의존적이고 불편해서 Java의 객체지향 특성을 잘 살리지 못했던... 추운 겨울에 한 줄기 봄처럼 등장한 듯 했다. 스프링은 이제는 위의 모든 기술을 아우르는 개념처럼 불리우게 되었는데 문맥에 따라 다르게 사용된다. 스프링 DI 컨테이너 기술, 스프링 프레임워크, 모두 포함한 스프링 생태계 등 실무를 진행하면서는 필요시 구체적으로 '스프링 세션', '스프링 클라우드' 등으로 특정하여 부른다고 한다. 스프링 프레임워크 핵심 기술 : 스프링 D..

공부/Spring 2022.09.13

[CS 면접 대비 공부] 소프트웨어 공학

TDD(Test Driven Development) TDD : 테스트 주도 개발, "테스트가 개발을 이끌어 나간다" 우리는 보통 개발할 때, 설계(디자인)를 한 후 코드 개발과 테스트 과정을 거치게 된다. 하지만 TDD는 기존 방법과는 다르게, 테스트케이스를 먼저 작성한 이후에 실제 코드를 개발하는 리팩토링 절차를 밟는다. 반복적인 "검토"와 "고쳐쓰기"를 통해 좋은 글이 완성된다. 이런 방법을 소프트웨어에 적용한 것이 TDD 방식이다. 소프트웨어 또한 반복적인 테스트와 수정을 통해 고품질의 소프트웨어를 탄생시킬 수 있다. 장점 작업과 동시에 테스트를 진행하면서 실시간으로 오류 파악이 가능함 (시스템 결함 방지) 짧은 개발 주기를 통해 고객의 요구사항을 빠르게 수용 가능. 피드백이 가능하고 진행 상황 파..

[CS 면접 대비 공부] 데이터베이스

데이터베이스 풀 Connection Pool 클라이언트의 요청에 따라 각 어플리케이션의 스레드에서 데이터베이스에 접근하기 위해서는 Connection이 필요하다. Connection Pool은 이런 Connection을 여러 개 생성해 두어 저장해 놓은 공간(캐시) 또는 이 공간의 Connection을 필요할 때 꺼내 쓰고 반환하는 기법을 말한다. DB에 접근하는 단계 웹 컨테이너가 실행되면서 DB와 연결된 Connection 객체들을 미리 생성하여 pool에 저장한다. DB에 요청시, pool에서 Connection 객체를 가져와 DB에 접근한다. 처리가 끝나면 다시 Pool에 반환한다. Connection이 부족하면? 모든 요청이 DB에 접근하고 있고 남은 Connection이 없다면, 해당 클라이언..

[CS 면접 대비 공부] 네트워크

OSI 7계층 물리 계층 (Physical Layer) 네트워크의 기본 네트워크 하드웨어 전송 기술을 이룬다. 네트워크의 높은 수준의 기능의 논리 데이터 구조를 기초로 하는 필수 계층이다. 전송 단위는 Bit이다. 데이터 링크 계층 (Data Link Layer) 종단(Point to Point) 간 신뢰성 있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다. 주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다. 데이터 전송 단위는 Frame이다. 네트워크 계층 (Network Layer) 여러개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하..

[CS 면접 대비 공부] 운영체제

운영체제 운영체제란 운영체제는 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어입니다. 운영체제의 구성 운영체제는 인터페이스(GUI)와 시스템 호출(System Call), 커널(Kernel)과 드라이버(Driver)로 구성됩니다. 이 중 사용자와 응용 프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자와 응용 프로그램에 돌려주는 인터페이스와 운영체제의 핵심 기능을 모아놓은 커널로 구분됩니다. 운영체제의 역할과 목적 효율적인 자원 관리 안정적인 자원 보호 확장성 높은 하드웨어 인터페이스 제공 편리한 사용자 인터페이스 제공 커널과 인터페이스 커널(kernel)은 운영체제의 핵심 기능을 모아놓은 것이며, 인터페이스(interface)는 사용자와 응용..

[Section 08] 웹 어플리케이션 취약점 (383~ 386pg)

[03 크로스 사이트 요청 위조(CSRF) ] (1) 개요 웹 어플리케이션에서 정상적인 경로를 통한 요청과 비정상적인 경로를 통한 요청을 서버가 구분하지 못할 경우 공격자가 스크립트 구문을 이용하여 정상적인 사용자로 하여금 조작된 요청을 전송하도록 하여 게시판 설정 변경, 회원 정보 변경 등의 문제가 발생할 수 있는 취약점을 말한다. 공격자가 GET 또는 POST 방식의 HTTP 요청을 통해 희생자 모르게 공격자의 의도된 행위를 수행하게 하여 특정 피래를 주는 형태이다. 공격을 당한 사용자의 권한을 공격자가 그대로 사용하게 되므로 사용자의 권한 수준에 따라 그 피해범위가 달라질 수 있다. (2) 실습 (3) 취약점 판단 기준 CSRF 취약점이 발생할 수 있는 입력 가능한 폼에 img 태그의 src 속성을..

[Section 08] 웹 어플리케이션 취약점 (356~ 374pg)

[ 01. SQL Injection 취약점 ] (1) 개요 Web Application에서 입력 받아 데이터베이스로 전달하는 정상적인 SQL 쿼리를 변조, 삽입하여 불법 로그인, DB 데이터 열람, 시스템 명령 실행 등을 수행하여 비정상적인 데이터베이스 접근을 시도하는 공격 기법 조작한 입력으로 데이터베이스를 인증 절차 없이 접근 및 자료를 무단 유출하거나 변조할 수 있음 DB에 악성 스크립트를 삽입하여 접근하는 사용자를 피싱 사이트 또는 악성코드 유포 사이트로 유도 Stored Procedure를 통한 OS 명령어 실행 DB에 있는 개인정보 획득 무료 SQL Injection 취약점 스캐너 Nikto : 오픈소스로 웹서버 및 SQL Injection에 대한 취약점 점검, 리눅스 기반 SQLMap : 블..

[Section 07] 어플리케이션 기본 학습 (350~ 355pg)

[04. SNMP] 개요 TCP/IP 기반 네트워크 상의 각 호스트로부터 정기적으로 여러 관리 정보를 자동으로 수집하거나 실시간으로 상태를 모니터링 및 설정할 수 있는 서비스로 NSMP는 프로토콜일 뿐이며 이를 활용하여 실제 네트워크 관리 정보를 얻기 위해서는 관련 프로그램이 준비되어야 한다. 시스템이나 네트워크 관리자로 하여금 원격으로 네트워크 장비를 모니터링하고 환경설정 등의 운영을 할 수 있도록 하는 네트워크 관리 프로토콜이다. 관리의 편의성을 주지만 여러 취약점들이 존재하여 서비스 거부 공격, 버퍼 오버플로우, 비인가 접속 등 여러가지 문제점들이 발생할 수 있다. SNMP 구성 요소는 기본적으로 관리 시스템과 관리 대상으로 나뉘는데, 관리 시스템을 Manager, 관리 대상을 Agent라고 부른다..

[Section 07] 어플리케이션 기본 학습 (342~ 349pg)

[03 FTP] (1) 개요 FTP는 TCP/IP 기반의 원격으로 떨어져 있는 서버와 클라이언트 사이의 파일 전송을 위한 통신 프로토콜 중 하나이다. FTP 서비스는 아이디 및 패스워드가 암호화되지 않은 채로 전송되어 간단한 스니퍼에 의해서도 아이디 및 패스워드가 노출될 수 있으므로 반드시 필요한 경우를 제외하고는 FTP 서비스 사용을 제한해야 한다. FTP 서비스를 이용할 경우에는 안전한 암호화된 통신을 수행하는 다음 서비스 이용을 권장한다. SFTP : SSH 기반의 파일 전송 프로토콜로 기본적으로 22/TCP 포트 사용 FTPS : 전송계층의 SSL/TLS 기반의 파일 전송 프로토콜로 기본적으로 990/TCP 포트 사용 (2) 동작모드 FTP 능동 Mode 특징 일반적으로 능동모드가 FTP 클라이언..

[Section 07] 어플리케이션 기본 학습 (333~ 341pg)

[02 HTTP] (1) 개요 HTTP 프로토콜은 웹상에서 클라이언트와 서버 간에 통신을 위해 개발된 프로토콜이다. 웹의 정식명칭은 월드 와이드 웹으로 전 세계에 거미줄처럼 연결된 망이라는 의미이다. 다양한 하이퍼 텍스트 문서들이 웹상에서 서로 연결되어 있다. 하이퍼 텍스트 문서란 참조 혹은 링크를 통해 한 문서에서 다른 문서로 접근할 수 있는 문서를 말한다. 대표적인 하이퍼 텍스트 문서로 HTML이 있다. 주로 80/tcp 포트를 사용하며 1991년 HTTP 초기버전이 발표된 이후 1996년 1.0버전, 1999년 1.1버전이 발표되어 널리 사용되고 있다. HTTP 통신은 클라이언트 요청과 서버 응답으로 이루어져 있다. 비연결형 프로토콜 HTTP/1.0 버전까지는 클라이언트의 HTTP 요청에 대한 서버..

[Section 07] 어플리케이션 기본 학습 (315~ 332pg)

[01 DNS] (1) DNS 구조 용어 정리 Recursive/Cache 네임서버/DNS 서버 Recursive는 재귀적이라는 뜻으로 동일한 작업을 조건이 만족될 때까지 반복적으로 처리한다는 의미아다. 관리하는/위임받은 도메인 없이 사용자 호스트로부터 질의가 들어오며 자신의 캐시에 저장된 정보 또는 반복적 질의를 통해 그 결과를 사용자 호스트에 응답해주는 네임서버를 말한다. 일반적으로 ISP 업체가 제공해주는 DNS 서버가 해당된다. Authoritative 네임서버/DNS 서버 Authoritative는 권한있는 이라는 뜻으로 관리하는/위임받은 도메인을 가지고 있는 네임서버를 말한다. 즉 특정 도메인에 대한 정보를 관리하면서 해당 도메인에 대한 질의에만 응답해주는 네임서버를 말한다. 네임서버가 관리하..