전체 글

항상 최적의 코드를 고민합니다
무지성 박치기로 로그인을 구현하려했다가 몇주를 헤맸던지... 만약 처음으로 로그인을 구현하려 한다면 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" +..
개발중에 궁금증 하나가 생겼습니다. 웹의 구조를 완벽히 알고있는 사람들에게는 터무니 없는 궁금증으로 보일지도 모릅니다... 조금만 읽어보시고 이상하다싶음 넘어가주세요. # 내가 알고 있던 지식 백엔드에서 응답을 보내주는 방식에는 크게 API(JSON 같은 데이터만 응답하는경우), html파일 (template engine으로 데이터가 포함된 html파일로 응답하는 경우)가 있다. 전자는 앱 개발에, 후자는 웹개발에 사용. 앱은 html파일이 필요없기 때문입니다. # 궁금증 facebook 같은 웹과 앱이 동시에 작동하는 시스템은 어떻게 백엔드가 만들어진거지? 웹 요청처리와 앱 요청처리를 따로 관리하도록 서버가 2개인건가? chatgpt에 따르면 facebook은 facebook api 하나로 웹, 앱 요..
// Instagram.domain.member.dto @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor public class RegisterRequest { @ApiModelProperty(value = "유저네임", example = "dlwlrma", required = true) @NotBlank(message = "username을 입력해주세요") @Length(min = 4, max = 12, message = "사용자 이름은 4문자 이상 12문자 이하여야 합니다") @Pattern(regexp = "^[0-9a-zA-Z]+$", message = "username엔 대소문자, 숫자만 사..
# Entity를 정의할때 @Notnull, @NotBlank 같은 것들을 쓰는게 좋은가? 대부분의 값들은 not null인데 이걸 굳이 attribute마다 붙여주자니 너무 비효율적이지 않나? 차라리 값 검증코드를 따로 짜서 처리하는게 좋으려나? 생각해보니 @Column(nullable = false)로 해도 되지 않나? @NotNull 어노테이션은 Hibernate Validator에서 제공되며 필드값의 유효성 검사를 수행 nullable=false는 해당 필드에 대해 데이터베이스에서 NOT NULL 제약 조건을 생성하는 것 둘 다 사용하는것은 중복코드라고 볼 수 있으므로 데이터베이스의 무결성을 보장하는 nullable=false만 사용하는 것이 좋음 # 결론 nullable = false를 사용하자..
// Instagram.domain.member.entity @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @EntityListeners(AuditingEntityListener.class) @Table(name = "members") public class Member { @Id @Column(name = "member_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "member_username", nullable = false, length = 20, unique = true) private String usernam..
whitem4rk
high-end back-end