목록분류 전체보기 (175)
가자미의 개발이야기
도입 배경 Github Oauth를 통해 인증인가를 구현하던 과정에서 깃허브에서 발급된 코드를 통해 Github API에 Github Access Token을 발급 요청을 보내야했다. 그리고 발급된 Github Access Token을 통해 해당 사용자의 정보를 요청해야 했다. 선택 가능한 방법들 서버에서 HTTP 요청을 보낼 수 있는 방법은 여러가지가 있다. HTTPClient RestTemplate WebClient 간단하게 세가지 방법을 비교하자면 다음과 같다. HttpClient RestTemplate WebClient 논블락킹 방식 제공 여부 제공 X (블락킹 방식) 제공 비동기 방식 제공 여부 제공 X (동기 방식) 제공 필요한 의존성 없음(Java 11에 포함) spring-boot-star..
도입 배경 우아한테크코스에 프로젝트를 진행하는데 사용자의 정보를 기억해야 하는 상황이 필요한 경우가 있다. 예를 들면 사용자가 작성한 리뷰를 삭제하거나 수정할 수 있어야 한다. 그러려면 현재 접속한 사용자가 이전에 리뷰를 작성한 사용자임을 알아낼 수 있어야 한다. 일단 사용자를 구분하기 위해서 로그인을 해서 사용자를 구분해서 관리할 수 있도록 했다. 이때 사용자 인증하는 역할은 깃허브Oauth를 활용해서 깃허브에서 사용자를 인증하고 사용자의 정보를 반환한다. 이제 사용자에 대한 정보를 우리 프로젝트 서버로 가져왔다. 이 정보를 어딘가에 기억해놔야 사용자가 다음에 요청을 했을 때 같은 사용자임을 알 수 있다. 세션, JWT 토큰 정보를 어디에 저장할 지, 어떻게 저장할 지에 따라 세션, JWT 토큰을 활용..
어댑터 패턴 어댑터하면 실생활에서 콘센트 볼트를 호환 해주는 도구를 가르킨다. 어댑터 패턴은 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다. SOLID 중에서 개방폐쇄 원칙을 따른다(OCP) 서로 비슷한 인터페이스를 구현하지만 서로 동일하지는 않을 때 이를 호환해주는 어댑터 클래스를 활용하는 패턴이다. 활용 예시. 110v를 사용하는 가정에서 220v를 활용하려고 할 때 어댑터를 사용하는 얘시. 110v 인터페이스 package com.company.design.adapter; public interface Electronic110V { void powerOn(); }220v 인터페이스 package com.company.design.adapter; public interfa..
싱글톤 패턴 Singleton Pattern 싱글톤 패턴은 어떤 클래스(객체)가 유일하게 1개만 존재할 때 사용. 서로 자원을 공유 할 때 주로 사용. 현실에서는 프린터를 상상해보면 이해가 된다. 여러 컴퓨터가 한 프린터를 사용하는 경우가 싱글톤 패턴에 해당한다. 기본 생성자는 private로 접근을 막고 get메소드로 간접 접근하도록 구현한다. 사용 예시 한 소켓클라이언트 객체로 두 클래스가 사용하는 예시 소켓클라이언트 클래스 package com.company.design.singleton; public class SocketClient { private static SocketClient socketClient = null; //싱글톤 패턴에서는 자기 자신은 기본적으로 가지고 있어야 함 //기본 생..
기존의 c언어와 같은 절차지향으로 프로그램을 작성하다가 현실에 존재하는 사물을 있는 그대로 모델링하여, 행위와 속성을 정의하고, 절차적이 아닌 객체가 중심이 되어 실제로 사물이 동작하는 방식으로 설계하는 방식. 객체의 3 요소 상태 유지(객체의 상태)-상태정보 저장, 유지, 속성은 변수로 정의 되어있어야함. 또한 변경가능해야함. 기능 제공(객체의 책임)-메소드로 기능을 제공. 외부로부터 직접 속성에 접근해 변경하는게 아니라 객체의 메소드로 변경가능해야함. 고유 식별자 제공(객체의 유일성)-각 객체는 고유한 식별자 있어야함.(디비에서 유니크키 또는 프라이머리키) 물리 객체 : 물리적객체는 실제로 사물이 존재, 이를 클래스로 정의 개념 객체 : 서비스, 비즈니스 로직을 처리하는 부분. 객체 지향의 4대 요소..
힙 힙을 알기 위해서는 트리에 대한 기본적인 지식이 필요하다. 힙의 특성 어떤 특정 값을 찾아내는 기능은 지원하지 않지만, 값을 삽입하고, 최대값(최소값)을 찾거나 삭제하는데 큰 강점을 가진 자료구조. 만약 최소값을 찾거나 삭제하고 싶으면 힙성질을 반대로 설정하면 된다. 간단한 용어 설명 트리 표현법 표현법 1: level 0 부터 해당 노드 자리에 노드가 있으면 노드이름을 쓰고, 없으면 None이라고 써서 가능한 모든 자리만큼 원소를 갖는 리스트로 표현. 표현법 2: 트리의 수직적 관계를 리스트 속 리스트를 활용해 표현하기. [부모노드, [부모노드의 왼쪽 서브트리], [부모노드의 오른쪽 서브트리]]. 이때 빈 노드나 서브트리는 빈 리스트 []로 표현한다. 표현법 3: 노드 클래스 활용 각 노드를 노드클..
숫자형 스트림 reduce 메서드로 스트림 요소의 합을 구하는 사례를 보자 int calories = menu.stream() .map(Dish::getCalories) .reduce(0, Integer::sum); 이런 경우, reduce에 박싱비용이 포함되어 있다. 합계를 계산하기 전에 Integer를 기본형으로 언박싱해야한다. 기본형 특화 스트림 자바에서는 이런 박싱 비용을 피할 수 있도록 세 가지 기본형 특화 스트림을 제공한다. int 특화 IntStream double 특화 DoubleStream long 특화 LongStream 이런 특화 스트림은 오직 박싱 과정에서 일어나는 효율성과 관련 있으며, 스트림에 추가 기능을 제공하지는 않는다. 숫자 스트림으로 매핑 스트림을 특화 스트림으로 변환할 ..
평화로운 토요일 오전... 알바를 하며 자바 공부를 하고 있었다. 내가 쓴 코드를 보자. public class Ch1 { //using predicate! public static List filterPlayer(List list, playerPredicate p) { List result = new ArrayList(); for (Player i : list) { if (p.test(i)) { list.add(i); } } return result; } public static void printPlayer(List list){ for(Player i : list){ System.out.println(i); } } public static void main(String[] args){ List lis..
응용 프로그램? 응용 프로그램은 우리가 흔히 사용하는 엑셀이나 크롬같은 소프트웨어를 말한다. (그렇다고 모든 소프트웨어가 응용 프로그램인건 아니다. 우리가 공부하고 있는 운영체제도 소프트웨어 중 하나다.) 즉 응용 프로그램은 소프트웨어 중 운영체제를 제외한 모든 소프트웨어를 의미한다. 운영체제와 응용 프로그램 간의 관계 운영체제는 응용 프로그램을 관리한다. 응용프로그램을 실행시킨다. 응용 프로그램간의 권한을 관리한다.(관리자 권한으로 실행) 응용 프로그램을 사용하는 사용자도 관리한다.(로그인 과정) 응용 프로그램의 잚못된 작동을 저지한다. 응용 프로그램이 잘못 동작해서, 프로그램을 정지시킨다. 모든 파일 삭제를 막는다.(권한/사용자 관리) 한 응용프로그램이 지나친 cpu소모를 막는다. 결국 이 둘의 관계..
운영체제 역할1: 시스템 자원(System Resource) 관리자 operating system 혹은 os라고 부름 시스템 자원 = 컴퓨터 하드웨어 cpu(중앙처리장치), 메모리(dram, ram) IO devices (monitor, mouse, keyboard, network...) 저장매체: SSD, HDD 컴퓨터의 하드웨어는 혼자서 뭘 혼자 하지 못한다. 운영체제가 이를 운영한다. 대표적인 운영체제 windows os, mac os, unix unix는 현대 os의 기술을 최초로 구현한 운영체제. 윈도우즈와 맥 운영체제도 영향을 받았음 unix 계열 os unix 사용법이나 os구조가 유사(리눅스가 대표적.) 운영체제 역할2: 사용자와 컴퓨터간의 커뮤니케이션 지원 운영체제 역할3: 컴퓨터 하드웨..