Back-end

API를 설계한다고 하면 대부분 RESTful API를 떠올리게 됩니다. 간결하고 직관적인 설계 때문에 굉장히 많이 사용되고 있는 API 방식입니다. 하지만 우리는 그저 "다른 사람들이 다 하니까" RESTful API 방식을 채택하고 있지는 않은지 생각해 볼 필요가 있다고 생각합니다. 따라서 이 포스트에서는 RESTful API가 무엇이며, 왜 널리 대중적으로 사용되고 있는지 알아보고 다음 포스트에서는 다른 방식은 어떤 것들이 있는지 살펴보고, 무지성으로 RESTful API를 사용하는것이 아닌 어떤 서비스에 어떤 방식이 적절할지 고민해보도록 하겠습니다. REST API, RESTful API를 보통 혼용해서 사용하며 두가지 모두 REST 원칙을 준수하는 API로 의미는 같습니다. REST API를 알..
· Back-end
DDD에 대한것들을 공부하다가 관리, 운영, 배포에 관한 글을 읽고 배운것이 많아 글로 남기게 되었습니다. 기술에 대한 자세한 내용은 없고 철학이나 각각의 역할에 대해서만 서술하겠습니다. # 시대 변화 시대는 하루가 빠르게 변화하고 있습니다. 특히 이공계쪽은 미래가 상상이 가지 않을정도 입니다. 결국 사용자에게 '서비스'를 제공하는 개발자라는 사람들은 알 수 없는 미래에 빠르게 대응해야 하는 상황입니다. '성능(속도)'과 '확장성'이 굉장히 중요해졌습니다. 서비스라는 것도 결국 돈에 의해 만들어지고 운영되는 것이기 때문에 2가지 특성을 가지고 가면서 비용을 최소화하려고 노력하였습니다. # 어떻게 변하고 있는가 1. 대규모 silo 조직 -> 다기능 소규모 squad 조직 2. 서버 단위가 작아지고 있습니..
# DB를 잘 설계해야하는 이유 어플리케이션을 하나 만들기 위해서는 굉장히 많은 양의 데이터를 처리해야 합니다. 우리는 보통 이 문제를 DBMS를 사용하여 무수한 데이터를 저장하고 원할때마다 알맞게 꺼내씁니다. 하지만 실생활에도 그렇듯이 어떤 방식으로 정리하고 관리하느냐에 따라 사용할때의 속도(성능)이 달라집니다. 여러 데이터베이스 종류가 있지만 그 중에 RDB를 사용할때 조금 더 효율적인 DB를 설계할 수 있는 방법에 대해 알아보겠습니다. 효율적인 DB의 가장 궁극적인 형태는 '시간'과 '돈'을 최대한 아낄 수 있는 형태입니다. 서비스도 결국 '비용'으로 운영되고 관리되기 때문입니다. 예외적으로 다른 선택지를 택해야 할때도 있지만 비로소 이렇게 해야 나중에 발생할 '비용'도 최대한 줄일 수 있습니다. ..
# 등장배경 서드파티 어플리케이션이 사용자 대신 페북에 영향을 주거나 정보를 가져오려고 한다고 가정해 봅시다. 가장 기본적인 방법은 서드파티가 id, pw를 사용자로부터 입력 받아서 서드파티가 다른 서비스에 대신 로그인해서 접근하는 방식입니다. 하지만 이 방법에 치명적인 단점이 있는데 페북 id, pw를 서드파티가 관리할만큼 믿을만 한가에 대한 의문입니다. 즉, 서드파티의 보안수준이 페북의 보안수준이 되어버리는 문제가 발생합니다. 이를 해결하기 위해 서비스별로 여러가지 auth방식이 나왔는데 이를 OAuth로 통일시키기로했습니다. # OAuth란 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해 제3자 클라이언트(우리의 서비스)가 사용자의 접근 권한을 위임(Delegated Authorization)..
무지성 박치기로 로그인을 구현하려했다가 몇주를 헤맸던지... 만약 처음으로 로그인을 구현하려 한다면 documentation부터 차근차근 보는것을 추천합니다. 깃헙 뒤지고 아무리 구글링해도 내가 딱 원하는 나만의 로그인을 구현하다보면 생각외로 굉장히 많은 생소한 에러를 발견합니다. 1. SecurityContextHolder SecurityContextHolder는 SecurityContext를 가지고 있고 이를 통해 인증을 증명할 수 있습니다. 일반적으로 thread-local을 사용해서 정보를 저장하기 때문에 동일한 스레드라면 항상 SecurityContext에 접근 가능합니다. 다른 방식을 원하면 따로 설정 가능합니다. 2. SecurityContext Authentication 객체를 가지고 있습..
# Spring Security란? Spring Security는 Java 기반의 응용 프로그램에서 보안을 구현하기 위한 강력하고 널리 사용되는 프레임워크입니다. 인증, 권한 부여, 세션 관리 및 일반적인 보안 위협으로부터의 보호 등 다양한 보안 관련 문제를 해결하기 위한 기능을 제공합니다. 결론은 개발자가 좀 더 간편하게 보안을 구현할 수 있도록 도와주는 프레임워크입니다. # 구조 아주 간단하게 말해서 등록된 수많은 filter들을 통과한 요청을 안전한 요청으로 처리하는 식입니다. DelegatingFilterProxy 보통 서블릿 필터는 web.xml 파일에 직접 등록되어 사용됩니다. 반면, spring에서는 web.xml보다 JavaConfig 설정 파일을 사용합니다. delegatingFilter..
JPA가 무엇인지에 대해 오랫동안 이해하지 못하다가 이제서야 조금씩 이해가 가기 시작했습니다. 그동안 의문 가졌던것을 다 풀어볼까합니다. 아주 터무니없는 질문에 대한 답도 많을 예정이라 spring 고수분들에게는 추천드리지 않습니다. ORM ( Object-Relational Mapping ) JPA와 hibernate는 ORM 프레임워크로 잘 알려져 있습니다. 그런데 ORM이 무엇일까요? ORM의 가장 큰 역할은 바로 객체 지향 프로그래밍과 관계형 데이터베이스 간의 패러다임의 차이를 해결해주는 역할을 합니다. 객체 지향 프로그래밍에서는 객체 간의 연관성을 중요시하며, 이를 객체 간의 참조로 나타냅니다. 하지만 관계형 데이터베이스에서는 테이블 간의 관계를 외래키로 표현합니다. 또한 객체 지향 프로그래밍에..
// Instagram.domain.member.controller @Slf4j @Api(tags = "멤버 인증 API") @Validated @RestController @RequiredArgsConstructor public class MemberAuthController { private final MemberAuthService memberAuthService; private final int REFRESH_TOKEN_EXPIRES = 60 * 60 * 24 * 7; // 7일 @ApiOperation(value = "username 중복 조회") @ApiResponses({ @ApiResponse(code = 200, message = "M011 - 사용가능한 username 입니다.\n" +..
whitem4rk
'Back-end' 카테고리의 글 목록 (3 Page)