OAuth를 통한 인증의 문제와 OIDC
·
BE/개발일지
이번 기수부터 생긴 코테이토의 백엔드 네트워킹 시간. 우리 Team의 첫 주제는 OAuth와 OIDC이다. 아래 Flow의 문제점을 찾고 OIDC로 해결해보는게 첫 과제였다. 1. 가능한 OAuth2.0의 Flow 위 4가지 과정이 무엇을 하는지 정리해보자. 로그인 하지 않은 상태. 새로운 웹서비스 코테이토에 로그인하려하는데, 현재 로그인이 되어있지 않은 상태이다. 로그인 버튼을 눌러 OAuth로 로그인을 시도해보자. 카카오(소셜로그인) 동의여기서는 생일, 카카오계정(이메일), 출생년도, 성별, 연계정보, 카카오계정(전화번호)를 받아와도 되는지 허가 받고 있다. 카카오에서 해당 회원의 정보를 받아오려는데 user의 정보를 받아와도 되는지 확인하는 과정이다. cotato 서비스 회원 가입 약관동의이때, 다..
모던 자바 인 액션 - Chap12
·
PL/모던 자바 인 액션
LocalDate, LocalTime Instant, Duration, Period 클래스 LocalDate, LocalTime 사용 LocalDate는 시간을 제외한 날짜를 표현하는 객체로, 시간 정보를 포함하지 않는다. 정적 팩토리 메서드 of를 사용해 아래와 같이 인스턴스를 만들 수 있다. 또한 다양한 메서드로 날짜정보에 관한 값을 얻을 수 있다. LocalDate date = LocalDate.of(2023,10,09);//인스턴스 생성 int year = date.getYear(); Month month = date.getMonth(); int day = date.getDayOfMonth(); DayOfWeek dow = date.getDayOfWeek();// 요일 -> 월요일 반환 int l..
모던 자바 인 액션 - Chap11
·
PL/모던 자바 인 액션
이번 장은 Optional에 대해서 다룬다. Optional은 null을 대체하기 위해 등장한 클래스이다. null의 등장 배경은 컴파일러의 자동확인 기능으로 참조를 안전하게 사용할 수 있을 것이란 생각에서 시작되었다고 한다. 하지만, null을 만든 토니 호어는 이를 십억 달러짜리 실수라고 이야기했다. null에서 발생하는 문제는 뭐가 있을까 값이 없는 상황 차, 사람, 보험에 대한 클래스가 존재할때 다음 코드를 실행한다고 해보자. public String getInsuranceName(Person person){ return person.getCar().getInsurance().getName(); } 아무 문제 없이 실행될 것 같지만, 차를 소유하지 않은 사람이 있다면? getInsurance()를..
자바 병렬 프로그래밍 5.2 병렬 컬렉션
·
PL/모던 자바 인 액션
자바5 이전엔, 동기화된 컬렉션 클래스는 내부 변수에 접근하는 경로를 일련화해 스레드 안전성을 확보했다. 하지만 이 경우 동시 사용성에서 큰 손해를 볼 수 밖에 없었다. 자바 5 에서 등장한 병렬 컬렉션은 여러 스레드에서 동시에 사용될 수 있도록 설계되었다. ConcurrentHashMap 기존에 동기화된 컬렉션 클래스는 연산을 수행하는 시간동안 항상 락을 가지고 있어야했다. 그러나, 이경우 `HashMap.get` 또는 `List.contains`와 같은 일부 연산은 최악의 경우 모든 객체를 대상으로 메서드를 호출해야할 수도 있고 그 과정에선 다른 스레드는 내부의 값을 접근할 수 없었다. ConcurrentHashMap은 해시를 기반으로 하는 Map으로 lock Striping이라는 세밀한 동기화 기법..
모던 자바 인 액션 7주차 - Chap 08
·
PL/모던 자바 인 액션
이번 장에서는 컬렉션 API 8.1 컬렉션 팩토리 자바 9에선 작은 컬렉션 객체를 쉽게 만들 수 있는 몇가지 방법들이 제공되었다. 친구 3명의 이름을 컬렉션에 Array형태로 저장하는 두가지 방법들을 보자. 방법1: ArrayList활용 List friends = new ArrayList(); friends.add("Kim"); friends.add("Min"); friends.add("Jae"); 방법2: 팩토리 메서드 Arrays.asList사용 List friends = Arrays.asList("Kim","Min","Jae"); 방법1의 경우, 3개의 문자열을 저장함에도 많은 코드가 필요하지만, 방법2 `Arrays.asList()`라는 팩토리 메서드를 사용하면 코드 길이를 줄일 수 있다. 다만,..
모던 자바 인 액션 6주차 - Chap07
·
PL/모던 자바 인 액션
지금까지는 스트림을 통해 컬렉션을 선언형으로 제어하는 방법을 살펴봤다. 이번 장에선 `병렬 데이터 처리와 성능`에 대해 다룰 계획이다. 병렬 스트림 앞서, 4장에선 스트림 인터페이스를 이용하면 아주 간단하게 요소를 병렬로 처리할 수 있다고 이야기했다. `병렬 스트림`이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 여러 청크로 분할되어있으니 모든 멀티코어 프로세서가 각각의 청크를 할당받아 처리할 수 있다. 숫자 n을 인수로 받아 1~n까지 모든 숫자의 합을 반환하는 ㅁ네서드를 구현할때 우선 스트림으로 구현하면 다음과 같이 무한스트림을 받아 크기를 제한하는 방식으로 구현할 수 있다. public static long sequentialSum(long n) { retur..
자바 병렬 프로그래밍 - 3장
·
PL/모던 자바 인 액션
지난, 2장에서는 공유하는 데이터를 여러 곳에서 사용할 때 동기화하는 방법을 알아봤다. 이번 3장에서는 여러 스레드에서 특정 객체를 동시에 사용할 때 섞이지 않고 안전하게 동작하도록 객체를 공유하고 공개하는 방법을 알아볼 계획이다. 가시성(Visibility) 메모리 가시성이란, 멀티 스레드 환경에서 특정 공유변수를 참조하는 여러 스레드가 있을 때 하나의 스레드에서 데이터를 변경했는지 여부를 알 수 있느냐의 문제를 이야기한다. (동기화를 파악할 수 있느냐?) 이러한 가시성 문제는 직관적으로 이해할 수 있는 문제가 아니기에 쉽게 파악하고 코드를 작성하기 어렵다. 아래 코드를 보자. public class NoVisibility{ private static boolean ready; private stati..
소프트웨어 개발 방법론: 애자일 프로세스
·
CS/교육팀
이번 주는 소프트웨어 개발 방법론: 애자일 프로세스에 관한 주제를 다루겠다. 이 글을 통해 애자일 프로세스가 무엇인지 정리하고자 한다. 소프트웨어 프로세스 우선, 소프트웨어 프로세스이다. 소프트웨어 프로세스란, 소프트웨어를 개발하기 위해 필요한 활동의 집합을 구조화해서 정리한 집합이다. 즉, 해야할 비슷한 활동들을 묶어놓은 것인데 적게는 4단계, 크게는 5단계로 구분한다. Specification: 요구사항과 기능을 정의하고 스펙을 명시하는 과정이다. Design and Implementation: 실제 코드를 설계하고 작성하는 개발과정 Validation: 작성한 코드가 요구사항대로 진행되는지 검증하는 Testing 과정 Evolution: 유지, 보수하는 과정 여기서 Design과 Implementa..
Git이란?
·
CS/교육팀
프로젝트를 한다하면 Git 을 무조건적으로 사용한다. 그렇다면 Git을 왜쓸까? 이번주차에는 Git에 대해 잘 모르는 사람들, 헷갈리는 부분을 짚고 Git의 작동원리에 대해 알아보는 시간을 갖겠다. Git이란? 우선, 깃 공식 사이트인 https://git-scm.com/ 에 들어가보면 다음과 같이 설명이 되어있다. 이를 번역해보면, `Git은 소규모 프로젝트부터 대규모 프로젝트까지 모든 것을 속도와 효율성으로 처리하도록 설계된 무료 오픈 소스 분산 제어 시스템`이라고 한다. 프로젝트에 사용하는 분산 버전 제어시스템이 핵심으로, 한마디로 정리하면 Git은 분산형 버전 관리 시스템이다. Git을 통해 프로젝트의 버전을 관리하는 것이다. 그렇다면 GitHub는 무엇일까? 말그대로, Git에 중심지, 중추를 ..
자바 병렬 프로그래밍 - 2장
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
유쓰응
글쓰는 개발자 Youth