본문 바로가기

개발

(10)
트러블 슈팅(trouble shooting) 트러블슈팅(troubleshooting)은 문제해결의 일종으로, 망가진 제품, 또는 기계 시스템의 망가진 프로세스를 수리하는 일에 주로 적용된다. 문제 해결을 위해 문제의 원인을 논리적이고 체계적으로 찾는 일이며 제품이나 프로세스의 운영을 재개할 수 있게 한다. 트러블슈팅은 증상 식별에 필수적이다. 개발을 진행하면서 발생하는 여러가지 복잡한 상황들을 종합적으로 판단하고 구조적으로 진단해 해결해 나아가는 것. 문제의 원인은 여러가지가 있을 수 있고, 프로젝트 규모가 커질 수록 발생하는 문제점 또한 커지고 많아 질 수 있다. 문제를 발생하게 되는 원인을 정확하게 파악하고 개선과 보완에 있어 매우 중요하다. 트러블 슈팅은 이러한 원인이 될 수 있는 문제들을 하나씩 해결해 나가는 방법이다. 체계적으로 문제를 해..
[Spring] @ComponentScan, @EnableJpaRepositories, @EntityScan @ComponentScan 어노테이션은 빈으로 등록 될 준비를 마친 클래스들을 스캔하여, 빈으로 등록해 준다. @Controller, @Service, @Component, @Repository 등 어노테이션을 붙인 클래스들이 빈으로 등록 될 준비를 한 것이다. // XML // JAVA @Configuration @ComponentScan( basePackages = "com", useDefaultFilters = false, includeFilters = { @Filter( type = FilterType.ANNOTATION, classes = {Component.class, Repository.class, Service.class, Controller.class} ) } ) use default는 ..
[Git] fatal: Not a valid object name: 'master'. Git 초기화 후 branch 생성하려고 할때 위와 같은 오류가 나왔다. 찾아보니 commit을 한번도 하지 않은 repository이기 때문이라고 한다. master branch로 최초 commit을 하지 않았기 때문이다. 최소 commit 1회 이상 진행한 후 다음 단계로 넘어가면 된다. git 홈페이지 참고하여 커밋 후 branch 생성하니 잘 되는 것을 보았다.
[Spring] JPA 기본 키 생성 전략 JPA 가 제공하는 DB 기본 키 할당 전략은 직접 할당 방식과 자동 생성 방식 두 가지가 있다. 직접 할당은 컬럼에 @Id 만 사용하여 생성하는 방식이 있고, @Id가 적용 가능한 Java Type은 아래와 같다. Java 기본형(int, double, long ...) Java Wrapper 형 String java.util.Date java.sql.Date java.math.BigDecimal java.math.BigInteger 해당 전략은 em.persist()로 Entity를 저장 하기 전, Application에서 직접 기본 키를 할당해주어야 한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA"); Entity..
[Spring] @transactional 동작 원리 트랜잭션이란 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, commit 을 자동으로 수행해준다. 예외 발생 시 rollback 처리를 자동으로 수행해준다. 트랜잭션은 4가지의 성질을 가지고 있다. 원자성(Atomicity) 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉, 모두 성공 또는 모두 실패. 일관성(Consistency) 트랜잭션은 일관성 있는 데이타베이스 상태를 유지한다. (data integrity 만족 등.) 격리성(Isolation) 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다. 영속성(Durability) 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다. 트랜잭션 처리 방법 스프링에서는 간..
[Spring] JPA 복합 키 생성 (@Embeddable, @IdClass) 스프링에서 Entity를 복합키로 설정하여 설계할 때 JPA에서는 2가지 방법을 알려준다. 1. @Embeddable 2. @IdClass 2가지 방법이 있다. @Embeddable 객체지향 방식에 가깝다고 한다. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Fruit { @EmbeddedId private FruitId id; private String name; } Fruit 엔티티에 식별자 클래스를 직접 사용하고 @EmbeddedId 어노테이션을 적여주면 된다. @NoArgsConstructor @AllArgsConstructor @Embeddable public class FruitId implements Seri..
[Spring] JPA 잠금(Lock) 이해하기 최근에 데이터 동기화 관련 문제를 처리하기 위해 검색하다 찾아본 어노테이션에 대해 작성해 보려 한다. 문제는 increase형식에 데이터를 저장해야 하는데 spring에서 비동기로 처리된 데이터를 유실 없이 데이터 무결성을 검증하여 트랜잭션을 처리하려고 한다. 검색 결과, @Lock annotation을 통해 트랜잭션 충돌을 방지하고 데이터에 Lock을 걸어 데이터를 보호한다. 잠금에는 낙관점 잠금(Optimistic Lock)과 비관적 잠금{Perssimistic Lock)이 있다. 낙관점 잠금(Optimistic Lock) 낙관적 잠금이란 트랜잭션을 처리할때 충돌이 발생하지 않을 것이라는 낙관적 가정을 하는 기법이다. 낙관적 잠금을 사용하기 위해서는 Entity 내부에 @Version Annotati..
[Web] Content-Type 과 Content-Disposition 브라우저가 Content를 처리하는 방법은 Content-Type 과 Content-Disposition 속성을 조합 함으로써 결정된다. Content-Type 개체 헤더는 리소스의 media type을 나타내기 위해 사용된다. 전송되는 Content가 어떤 유형인지 알려주는 목적을 가진다. Content-Type을 통해 브라우저는 해당 데이터를 어떻게 처리해야 할 지 판단한다. TEXT 타입 Content-Type : text/css Content-Type : text/html Content-Type : text/javascript Content-Type : text/plain - 텍스트 파일에 대한 기본 값 FILE 타입 Content-Type : application/msword - doc Cont..