전체 글 275

[프로그래머스] 블록게임

문제 프렌즈 블록이라는 신규 게임이 출시되었고, 어마어마한 상금이 걸린 이벤트 대회가 개최 되었다. 이 대회는 사람을 대신해서 플레이할 프로그램으로 참가해도 된다는 규정이 있어서, 게임 실력이 형편없는 프로도는 프로그램을 만들어서 참가하기로 결심하고 개발을 시작하였다. 프로도가 우승할 수 있도록 도와서 빠르고 정확한 프로그램을 작성해 보자. 게임규칙 아래 그림과 같이 1×1 크기의 블록을 이어 붙여 만든 3 종류의 블록을 회전해서 총 12가지 모양의 블록을 만들 수 있다. 1 x 1 크기의 정사각형으로 이루어진 N x N 크기의 보드 위에 이 블록들이 배치된 채로 게임이 시작된다. (보드 위에 놓인 블록은 회전할 수 없다). 모든 블록은 블록을 구성하는 사각형들이 정확히 보드 위의 사각형에 맞도록 놓여있..

HTTP

HTTP(HyperText Transfer Protocol) HTML, TEXT, IMGAE, 음성, 영상, 파일, JSON, XML(API) 거의 모든 형태의 데이터 전송 가능 서버간에 데이터를 주고 받을 때도 대부분 HTTP사용 HTTP/1.1 버전을 가장 중요하며, HTTP/2, HTTP/3 은 1.1버전의 성능을 개선한 버전이다. 클라이언트 서버 구조 무상태 프로토콜(Stateless), 비연결성 HTTP 메시지 단순함, 확장이 가능하다. 클라이언트 서버구조 Request Response 구조 클라이언트는 서버에 요청을 보내고, 응답을 대기 서버가 요청에 대한 결과를 만들어서 응답 무상태 프로토콜(Stateless) 서버가 클라이언트의 상태를 보존 X 장점 : 서버 확장성 높음(스케일 아웃) 단점..

Study/Http 2021.07.26

URI(Uniform Resource Identifier)

URI Uniform : 리소스 식별하는 통일된 방식 Resource : 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier : 다른 항목과 구분하는데 필욯나 정보 URL, URN URL - Locator : 리소스가 있는 위치를 지정 URN - Name : 리소스에 이름을 부여 위치는 변할 수 있지만, 이름은 변하지 않는다. URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음 따라서 URI 는 곧 URL과 같은 의미로 이야기 된다. URL 전체 문법 scheme://[userinfo@]host[:port][/path][?query][#fragment] scheme 주로 프로토콜 사용 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙. 예 ) htt..

Study/Http 2021.07.26

인터넷 통신

IP(인터넷 프로토콜) 지정한 IP주소(IP Address)에 데이터 전달 패킷(Packet)이라는 통신 단위로 데이터 전달 IP 프로토콜의 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 비신뢰성 중간에 패킷이 사라지면 오류 발생 패킷이 순서대로 안오면 오류 발생 프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 오류 발생 TCP/ UDP TCP 특징 (전송 제어 프로토콜 Transmission Control Protocol) 연결지향 - TCP 3 way handshake (가상 연결) 데이터 전달 보증 순서 보장 신뢰 할 수 있는 프로토콜 현재는 대부분 TCP 사용 UDP 특징(사용자 데이터그램 프로토콜 User Datagram Protocol..

Study/Http 2021.07.26

[프로그래머스] 자동 완성

문제 포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g 만 입력해도 go를 추천해주므로 o를 입력할 필요가 없어진다! 단, 학습에 사용된 단어들 중 앞부분이 같은 경우에는 어쩔 수 없이 다른 문자가 나올 때까지 입력을 해야 한다. 효과가 얼마나 좋을지 알고 싶은 라이언은 학습된 단어들을 찾을 때 몇 글자를 입력해야 하는지 궁금해졌다. 예를 들어, 학습된 단어들이 아래와 같을 때 go gone guild go를 찾을 때 go를 모두 입력해야 한다. gone을 찾을 때 gon 까지 입력해야 한다. (gon이 입력되기 전까지는 go 인지 gone인지 확신할 수 없다.) gui..

의존관계 자동 주입

의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPoli..

Study/Java&Spring 2021.07.23

[프로그래머스] 방의 개수

문제 원점(0,0)에서 시작해서 아래처럼 숫자가 적힌 방향으로 이동하며 선을 긋습니다. ex) 1일때는 오른쪽 위로 이동 그림을 그릴 때, 사방이 막히면 방하나로 샙니다. 이동하는 방향이 담긴 배열 arrows가 매개변수로 주어질 때, 방의 갯수를 return 하도록 solution 함수를 작성하세요. [제한사항] 배열 arrows의 크기는 1 이상 100,000 이하 입니다. arrows의 원소는 0 이상 7 이하 입니다. 방은 다른 방으로 둘러 싸여질 수 있습니다. [입출력 예] arrows return [6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 1, 6, 5, 5, 3, 6, 0] 3 입출력 예 설명 (0,0) 부터 시작해서 6(왼쪽) 으로 3번 이동합니다. 그 이후 주어진 ..

컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 스프링 빈을 등록할 떄 자바코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열하는 방식과 자동으로 주입하는 방식 두가지가 있다. 직접 빈을 일일이 등록하면 설정정보도 커지도 누락하는 문제점이 생기고 무엇보다 반복적으로 계속 적어줘야한다는 단점이 존재한다. 이를 해결하기 위해 자동주입을 한다. 컴포넌트 스캔 기능을 이용해서 자동으로 스프링 빈을 등록한다. 의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다. package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotat..

Study/Java&Spring 2021.07.20

싱글톤 컨테이너

싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 객체 인스턴스를 2개이상 생성하지 못하도록 막아야함. private 생성자를 사용해서 외부에서 임의로 new키워드를 사용하지 못하도록 막아야한다. 싱글톤 패턴의 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. -> DIP를 위반한다. 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다. 테스트하기 어렵다 내부 속성을 변경하거나 초기화 하기 어렵다. private 생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성이 떨어진다. 안티패턴으로 불리기도 한다. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로..

Study/Java&Spring 2021.07.20

XML, BeanDefinition

Spring의 BeanFactory는 다양한 형식의 설정 정보를 받아드릴 수 있게 설계 되어있다. XML 설정 사용 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는다. 아직 많은 레거시 프로젝트 들이 XML로 되어있고, 또 XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점이 있다. GenericXmlApplicationContext를 사용하면서 xml 설정 파일을 넘기면 된다. xml 기반의 AppConfig.xml 스프링 설정 정보와 자바 코드로 된 AppConfig.java 설정 정보를 비교하면 거의 비슷한 결과를 얻을 수 있다. package hello.core.xml; import hello.core.member.MemberService; import..

Study/Java&Spring 2021.07.20