Back-end/Spring 기초개념

1. 예외 처리 - JPA 예외는 모두 Unchecked Exception 트랜잭션 롤백을 표시하는 예외 - 심각한 예외, 복구해선 안됨 (엔티티 중복, 부재, 낙관적 락, 비관적 락 등)트랜잭션 롤백을 표시하지 않는 예외 - 호출 시 결과가 없을때, 시간 초과JPA 예외들은 스프링 예외로 변경됩니다.ex)javax.persistence.PersistenceException -> org.springframework.orm.jpa.JpaSystemException 등  2. 엔티티 비교 다른 영속성 컨텍스트라면 DB상의 같은 ROW라 하더라도 "==" 으로 비교할 수 없다. 식별자(ID)를 비교하거나 equals 재정의를 통해 비교해야함  3. 프록시 심화 주제 프록시로 조회한 엔티티의 동일성도 보장하는가..
우리는 대게 Entity에 setter 사용을 지양해야 한다는 것을 알고 있습니다. 아직 spring에 대해 깊게 파악하지 못하고 OOP의 본질을 정확히 알지 못하는 저로서는 이 제한이 기능 구현에 꽤 답답함을 느끼게 했습니다. 그래서 이번 포스트에서는 setter 사용을 지양해야하는 이유를 알아보되, 구글링했을시에 나오는 뻔한 답변들과 좀 더 깊은 이유에 대해서 알아보고 제가 느꼈던 불편함들과 이에 대한 해결방안을 알아보도록 하겠습니다. # Entity에 setter를 사용하지 않는 (뻔한) 이유 1. 의도를 파악하기 어렵다. @Service public class TempService { public void update(Long id, String name){ Temp temp=tempReposit..
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" +..
// 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엔 대소문자, 숫자만 사..
// 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..
혼자 무작정 코드를 짜려니 대체로 사용하는 구조? 틀?을 도저히 모르겠네요... 그래서 깃헙을 좀 뒤져보다가 분석하기 좋은 클론코딩을 발견했습니다. 최신 기술이 좀 잘 버무려져있어서 좋았습니다. 누군가가 프로젝트로한것 같은데 알고보니 인하대생 3명이었습니다. 너무 반가우면서도 자괴감이... 아무튼 앞으로 코드를 좀 분석하면서 어떻게 구성을 해야 좋을지좀 공부해보려합니다. https://github.com/Instagram-Clone-Coding/Spring_instagram-clone GitHub - Instagram-Clone-Coding/Spring_instagram-clone: Instagram Clone Coding - Backend using Spring Framework Instagram Cl..
Spring을 공부하면서 빈과 컴포넌트를 공부했는데 둘의 역할이 비슷한 느낌이기도 하고 어떤때에 뭘 써야 좋을지 제 나름의 기준이 서지 않았습니다. 그래서 빈과 컴포넌트의 정확한 역할과 둘의 차이점에 대해 알아보도록 하겠습니다. # @Bean 이란? @Bean 어노테이션은 개발자가 직접 스프링 빈(Bean)을 등록할 때 사용됩니다. @Bean 어노테이션은 메소드에 적용되며, 해당 메소드가 반환하는 객체를 스프링 빈으로 등록합니다. @Bean 어노테이션을 사용하면 개발자가 직접 빈을 생성하고 초기화할 수 있으므로, @Component 어노테이션보다 더 세밀한 제어가 가능합니다. @Configuration public class ExampleConfig { @Bean public ArrayList array..
whitem4rk
'Back-end/Spring 기초개념' 카테고리의 글 목록