2022/05 10

서블릿(Servlet)

서블릿(Servlet) 이란? 서블릿이란 동적인 페이지를 만들기 위해 사용되는 웹 애플리케이션 프로그램 낮은 성능 및 낮은 수준의 확장성과 같은 CGI 의 한계를 해결 CGI (Common Gateway Interface)는 뭔가요? CGI 는 실제로 C 또는 C++ 와 같은 프로그래밍 언어를 사용하여 작성된 외부 응용 프로그램이며 클라이언트 요청을 처리하고 동적 콘텐츠를 생성하는 역할 CGI 는 이처럼 서버에서 모든 요청에 대한 프로세스를 만들기 때문에 많은 요청이 있을 경우 메모리에 적재하여 CPU할당을 받아 실행되는 프로세스는 서버에 부하가 많이 일어난다. 그래서 이를 해결하고자 모든 새 요청에 대해 프로세스를 생성하지 않고, 모든 요청을 동시에 처리하는 단일 인스턴스만 존재하는 서블릿을 사용합니다..

스프링 2022.05.31

싱글톤 패턴(Singleton)

정의 객체의 인스턴스가 오로지 한개만 생성되도록 설계하는 것 클래스의 인스턴스화를 하나의 객체로 제한 왜 쓰는지?? Singleton은 고유한 리소스를 캡슐화하여 애플리케이션 전체에서 쉽게 사용할 수 있도록 함 캘린더, 로깅 등에 사용 됨 why? => 오로지 한개만 필요하기 때문에 기타 장점 인터페이스를 구현 가능 지연 로드 가능 단점 전역 상태는 코드의 결합을 증가시키기 때문에 리팩토링하기가 어려워 진다. 클래스가 싱글톤의 구체적인 구현에 의존하게 된다. → IoC/ DI 컨테이너를 사용하여 객체를 요청하는 하는 것으로 바꿔야 한다. 단위 테스트가 어려워짐 → 생성자를 통해 동적으로 객체를 주입할 수 없어 이런 경우는 필요한 객체를 직접 만들어서 사용해야 하기 때문에 테스트용 객체로 대체하기가 힘듬 ..

스프링 2022.05.26

REST ? RESTful ? REST API?

자바 스프링을 공부하기에 카테고리는 마땅히 추가할 곳이 없어 스프링에 분류했습니다. F-lab 2주차 RESTful 에 대하여 한번 공부해보라는 과제가 주어져 한번 찾아보게 되었다. 자바 스프링 공부를 하면 자연스럽게 HTTP 도 공부를 하게 되는데 그 과정에서 REST라는 단어를 많은 사람들이 쓰는것을 보았고 RESTful 하다. RESTful 하지않다. REST API 를 만드려면 어떻게 해야하나요? 라는 글 같은 것을 많이 봤지만 아직 나랑은 먼 단계 라고 생각하여 자세하게 알아 볼 생각은 없었다.. 반성하자 과제도 과제이지만 이미 많은 사람들이 언급하는 것으로 보아 중요할 것 같은데 왜 이런 말들이 많을까 한번 알아보고 정리해봤다. 왜? 라는 이유에 집중을 해봤다. REST REST(REprese..

스프링 2022.05.26

모던 자바 인 액션 - 6장 스트림으로 데이터 수집

6.1 컬렉터란 무엇인가? Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정 함수형 프로그래밍은 ‘무엇'을 원하는지 직접 명시할 수 있어 어떤 방법으로 이를 얻을지는 신경 쓸 필요가 없다. 이는 다수준으로 그룹화를 수행할 때 명령형 프로그래밍과 함수형 프로그래밍의 차이점이 더욱 두드러진다. 명령형 코드에서는 문제를 해결하는 과정에서 다중 루프와 조건문을 추가하며 가독성과 유지보수성이 떨어지지만 함수형 프로그래밍에서는 컬렉터를 쉽게 추가할 수 있다. 강점 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다 명령형 프로그래밍에서 직접 구현해야 했던 작업이 자동으로 수행 collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 방문하면서 컬렉터..

관심사의 분리(Seperation Of Concern)

객체지향의 세계에서는 모든 것이 변한다. 변수나 객체의 필드값이 변하는게 아닌 객체에 대한 설계와 이를 구현한 코드가 변한다는 뜻 입니다. 사용자의 변화하는 요구사항은 소프트웨어 엔지니어링에서 피할 수 없습니다. 그래서 개발자는 객체를 설계할 때 이 '변화하는 미래를 어떻게 대비할 것인가' 를 고려해야 합니다. 가장 좋은 방법은 변화가 이루어질 때 이 변화의 폭을 최소한으로 줄여주는 것이다. 이 변화의 폭을 최소한으로 줄이기 위해 관심사의 분리가 필요합니다. 사용자는 자동차를 운전한다 라는 프로그램을 만드려고 합니다. 그런데 사용자가 아반떼를 운전하고싶다는 요구사항이 있습니다. 그럼 어떻게 코드를 구현할 수 있을까요? class Avante { public void accel(){ System.out.p..

스프링 2022.05.18

모던 자바 인 액션 - 5장 스트림 활용

스트림 활용 지난 장에서 외부 반복을 내부 반복으로 바꾸는 방법을 살펴봤습니다. 데이터를 어떻게 처리할지는 스트림 API가 관리 → 편리하게 데이터관련 작업을 할 수 있다. 스트림 API 내부적으로 다양한 최적화가 이루어질 수 있다. 스트림 API는 내부반복 뿐 아니라 코드를 병렬로 실행할지 결정 가능 이러한 일은 단일 스레드로 구현하는 외부 반복으로는 달성할 수 없습니다. 이번 파트는 스트림 API가 지원하는 다양한 연산을 살펴볼 것입니다. 1. 필터링 스트림의 요소를 선택하는 방법 두가지 프레디케이트 필터링 방법과 고유 요소만 필터링 하는 방법을 알아봅시다. 1.1 프레디케이트 필터링 스트림 인터페이스는 filter 메서드를 지원 프레디케이트를 인수로 받아 프레디케이트와 일치하는 모든 요소를 포함하는..

[프로그래머스 Level3] 불량 사용자(JAVA) - 2019 카카오 인턴

문제 https://programmers.co.kr/learn/courses/30/lessons/64064?language=java 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr [제한사항] user_id 배열의 크기는 1 이상 8 이하입니다. user_id 배열 각 원소들의 값은 길이가 1 이상 8 이하인 문자열입니다. 응모한 사용자 아이디들은 서로 중복되지 않습니다. 응모한 사용자 아이디는 알파벳 소문자와 숫자로만으로 구성되어 있습니다. banned_id 배열의 크기는 1 이상 user_id 배열의 크기..

카테고리 없음 2022.05.12

모던 자바 인 액션 - 4장 스트림 소개

스트림 소개 거의 모든 자바 애플리케이션은 컬렉션을 만들고 처리하는 과정을 포함합니다. 대부분의 프로그래밍 작업에 사용되며, 컬렉션으로 데이터를 그룹화하고 처리할 수 있습니다. 비즈니스 로직상 컬렉션에 대해 특정 카테고리로 그룹화 하던가, 특정 키워드를 사용하여 원하는 결과를 찾는 연산을 요구하는 작업이 있을 수 있습니다. 대부분 데이터베이스에서는 선언형으로 이와 같은 연산을 표현할 수 있습니다. 예를 들어 ‘SELECT name FROM cars WHERE price < 2500’이라는 문장같이 2500 이하인 차량을 선택하라는 SQL질의를 만들 수 있습니다. 이처럼 자동차의 속성을 이용하여 어떻게 필터링 할 것인지는 구현할 필요가 없습니다. 어떻게 구현해야 할지 명시할 필요가 없고 구현은 자동으로 제..

트랜젝션(Transaction)

트랜잭션 트랜젝션은 데이터베이스 내에서 수행되는 더 이상 쪼갤 수 없는 최소 작업의 단위로, 데이터베이스의 무결성을 유지하며 상태를 변화시키는 기능을 수행합니다. 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영구성(Durability) 를 보장합니다. 이 성질의 앞 글자를 따서 ACID 라고 부릅니다. *데이터베이스는 COMMIT 과 ROLLBACK 명령어를 통해 데이터의 무결성을 보장합니다. Commit : 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것 Rollback : 작업 중 하나라도 실패해서 변경 사항을 취소하고, 이전의 상태로 되돌리는 것 트랜잭션의 목적 은행 시스템에서 A 가 B에게 출금을해서 입금하는 상황이 있습니다. 송금하려는..

CS 2022.05.03

모던 자바 인 액션 - 3장 람다 표현식

람다표현식 이번에는 람다 표현식을 어떻게 만드는지, 어떻게 사용하는지, 어떻게 코드를 간결하게 만들 수 있는지 설명하는 장입니다. 또한 자바 8 API에 추가된 중요한 인터페이스와 형식 추론 등의 기능도 확인하며, 마지막으로 람다 표현식과 함께 위력을 발휘하는 새로운 기능인 메서드 참조를 설명하겠습니다. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있습니다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있습니다. *람다의 특징 익명 보통의 메서드와 달리 이름이 없어 익명이라 표현합니다. 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수..