
📌 문제 파일 업로드할 때 서버단에서 파일의 확장자를 체크한다. 업로드할 수 없는 파일 확장자면 예외를 던진다. 원래는 uploadfive의 onError에서 오류가 발생한 파일을 파일 목록에서 지우려고 했다. 그런데 Web.config에서 CustomeError에서 예외 발생시 에러 페이지로 리다이렉트해서 onError로 넘어오지 않았다. (onUploadComplete trigger됨) uploadfive의 filetype 속성으로 확장자를 제한하려고도 했는데 파일 업로드 자체를 막지 못했다. 📌 문제 해결 업로드 후 trigger 되는 onUploadComplete함수에서 try catch문으로 이를 처리했다.

최근에 좀 익숙하지 않은 문법이 있어서 조금씩 정리해보려한다. 📌 Expression-bodied member 속성이나 메서드의 바디 블럭이 간단한 경우, 이를 람다식으로 표현할 수 있다. 📌 기본 인터페이스 메서드 인터페이스에 메서드를 추가할 수 있다. 이 기능은 해당 인터페이스의 기존 구현과 소스 또는 이진 호환성을 손상시키지 않고 메서드를 추가하기 위해 만들어졌다. (하위 호환성) 기본 인터페이스 메서드는 해당 인터페이스 타입 변수에서만 접근할 수 있다. 인터페이스에 속성도 선언할 수 있다. 📌 ? 관련 연산자 1. ? : null-forgiving 연산자 값 타입에도 null을 할당할 수 있게 해준다. null 상태를 체크할 수 있는 기능이 있는 struct (HasValue) 컴파일시 Nulla..

📌 APPLY 연산자 JOIN 절과 비슷한 연산자다. 두 테이블 표현식을 조인할 수 있게 해준다. APPLY 연산자는 2개가 있다. CROSS APPLY와 OUTER APPLY 연산자. CROSS APPLY는 INNER JOIN, OUTER APPLY는 LEFT OUTER JOIN과 Query 결과가 같다. 아마 SQL JOIN문을 잘 알면 몇 개 예시만 봐도 쉽게 사용할 수 있을 것으로 생각된다. 📌 JOIN 절과의 차이점 테이블 반환 함수를 테이블처럼 사용해 조인할 수 있다. 조인 조건을 ON이 아닌 내부 테이블의 WHERE 문으로 설정할 수 있다. 특정 상황에서 JOIN 절보다 더 성능이 좋을 수 있다. 쿼리 예제와 더 디테일한 내용은 아래 Reference 링크를 보면 좋을 것 같다. 📌 Refe..

원본 테이블과의 조인 결과를 기반으로 대상 테이블에서 삽입, 업데이트 또는 삭제 작업을 실행한다. 📌 쿼리 구조 target_table : MERGE 문의 WHEN 절에 지정된 삽입, 업데이트 또는 삭제 작업의 대상 table_source : target_table의 데이터 행과 일치하는 데이터 원본을 지정한다. 서브쿼리 또는 다른 테이블 SELECT 쿼리가 들어갈 수 있다. 보통 MERGE문은 행이 없는 경우 행을 삽입, 행이 일치하지 않는 경우 행을 업데이트하는 작업에 많이 사용한다. 📌 WHEN MATCHED 최대 두 개의 WHEN MATCHED 절을 사용할 수 있다. 두 개의 WHEN MATCHED 절을 사용할 때 주의가 필요하다. 1. 첫번째 절에 AND 조건을 주어야 한다. 예 : WHEN M..

이번에 JPA를 좀 공부해보면서 detach의 동작에 대해 이해하기 위해 테스트용 코드를 작성해봤다. 위와 같이 엔티티 클래스를 만들고 서비스 클래스에서 새로운 엔티티를 만들어 persist() 후 detach()를 호출했다. 위와 같이 서비스 클래스를 만들고 컨트롤러에서 /test GET 호출을 하면 MemberSerivceImpl의 test()가 호출되도록 개발했다. 내가 예상한 결과는 persist() 후 detach()해서 영속성 컨텍스트에서 엔티티를 관리하지 않고, transaction commit 전에 detach 했기 때문에 /test GET 호출 후 DB에 Member 데이터가 들어가지 않았을 것으로 생각했다. 그런데 확인해보니 DB에 데이터가 들어갔다. 예상한 것과 다른 결과가 나왔다. ..

이번에 JWT Token으로 로그인 기능을 개발했다. JWT를 만든 뒤 access-token을 쿠키에 저장했다. 이제 로그인 후 모든 Request의 Authorization Header에 쿠키에 저장된 access-token 값을 넣어야 한다. 이를 ASP.NET에서 다음과 같이 구현해 보았다. 📌 OAuthBearerAuthenticationProvider 구현 OAuthRequestTokenContext : bearer 인증 체계에 대한 HTTP 요청 헤더를 지정한다. 📌 구현한 OAuthBearerAuthenticationProvider 사용하도록 설정하기 stack overflow에서 찾은 방법인데 시간이 좀 지나서 링크를 찾지 못했다. 나중에 찾으면 링크를 추가할 계획이다.

@Query 어노테이션을 향상시켜 SELECT 쿼리 뿐 아니라 INSERT, UPDATE, DELETE, DDL 쿼리를 실행시킬 수 있게 해준다. DML, DDL @Query에 @Modifying을 선언하지 않으면 InvalidDataAccessApiUsageException이 발생한다. 📌 영속성 컨텍스트 관리를 위한 속성 clearAutomatically ( 기본 값 = false ) false → DML 쿼리를 실행(실행 후 flush()) 해도 영속성 컨텍스트의 데이터는 DML 쿼리 실행 전의 데이터다. 즉, 실제 DB의 데이터와 영속성 컨텍스트의 엔티티 데이터가 일치하지 않게 된다. 후에 데이터를 조회할 때도 1차 캐시의 데이터를 조회하기 때문에 주의가 필요하다. true → DML 쿼리를 실행..
- Total
- Today
- Yesterday
- default interface
- c#
- 스프링
- 다이내믹 프록시
- JavaScript
- 빌더 패턴
- 토비의 스프링
- Nullable
- 영속성
- JPA
- 준영속
- SpringBoot
- ASP.NET
- Effective Java
- @Modifying
- C# 문법
- Java
- OWIN
- MSSQL
- uploadfive
- spring boot
- jQuery
- 스프링 부트 테스트
- JpaRepository
- 고아 객체
- 스프링MVC
- orphanRemoval
- 자바의 정석
- DataAnnotation
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |