본문 바로가기

프로그래밍/Spring6

JDBC + MSSQL 조합 사용시 주의사항 JDBC + MSSQL 조합 사용시 주의사항 최근 Spring과 MSSQL 조합으로 사용시 SELECT시 CPU 사용량이 지속적으로 증가하는 문제를 겪었었다. 원인 JDBC의 MSSQL드라이버를 사용할 시 sendStringParametersAsUnicode옵션이 기본으로 true로 설정되어 있다. 해당 옵션은 모든 String 자료형을 nvarchar로 쿼리 실행에 전달하는데 varchar컬럼 검색시 형변환이 일어나면서 CPU가 마구 치솟는게 문제였다. (@P0 nvarchar(4000)) select * from example where example_varchar=@P0 해당 예제 쿼리처럼 example_varchar는 varchar컬럼인데도 불구하고 nvarchar로 검색을 시도한다. 해결 방법 .. 2022. 8. 5.
[토비의 스프링 5장] 서비스 추상화 5장 서비스 추상화 자바엔 표준 스펙/사용 제품/오픈소스를 통틀어서 사용 방법과 형식은 다르지만 기능과 목적이 유사한 기술이 존재한다. 환경과 상황에 따라서 기술이 바뀌고, 그에 따라 다른 API를 사용하고 다른 스타일의 접근 방법을 따라야 한다는 건 매우 피곤한 일이다. 트랜잭션 서비스 추상화 임의로 예외를 어떻게 발생시킬까? 정기 사용자 레벨 관리 작업을 수행하는 도중에 네트워크가 끊기거나 서버에 장애가 생겨서 작업을 완료할 수 없다면, 그때까지 변경된 사용자 레벨은 모두 되돌려 놓고, 유저들에게 알려야한다. 이런 상황의 테스트를 진행할 때는 어떤 방법이 있을까? 코드 자체를 수정한다. 테스트를 위해서 코드를 수정하는것은 매우 좋지 못한 방법이다. 때문에 해당 방법은 사용하지 않겠다. 상속을 통해서 .. 2022. 6. 13.
[토비의 스프링 4장] 예외 4장 예외 잘못된 예외처리 습관의 위험성 예외가 발생했는데 catch 블록을 써서 잡아내는 것까지는 좋으나 이후 아무 조치도 취하지 않고 넘어간다면 정말 위험한 일이다. 원치 않는 예외가 발생하는 것보다도 훨씬 더 나쁜 일이다. 프로그램 실행 중 어디선가 오류가 있어서 예외가 발생했는데 그것을 무시하고 계속 진행한다는 걸 의미하기 때문이다. 결국 발생한 예외로 인해 어떤 기능이 비정상적으로 동작하거나, 메모리나 리소스가 소진되어 예상치 못한 다른 문제를 일으킬 것이다. 최종적으로 오작동을 하거나 시스템 오류가 나서 운영자가 알아차렸을 때는 이미 조치를 취하기엔 너무 늦었다. 초난감 예외처리 try { ... } catch (SQLException e) { // 예외를 잡고는 아무것도 하지않는다. } tr.. 2022. 6. 10.
[토비의 스프링 3장] 템플릿 3장 템플릿 템플릿이란 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴을 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 예외처리 기능을 갖춘 DAO public void deleteAll() throws SQLException { Connection c = dataSource.getConnection(); PreparedStatement ps = c.prepareStatement("DELETE FROM users WHERE 1=1"); ps.close(); c.close(); ... DBO 객체 내의 ReparedStatement를 처리하는 중 오류가 발생하면 Connection 반환이 정상적으로 이.. 2022. 6. 9.
[토비의 스프링 2장] 테스트 2장 테스트 스프링의 핵심 가치 스프링이 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트다. 스프링으로 개발을 하면서 테스트를 만들지 않는다면 이는 스프링이 지는 가치의 절반을 포기하는 셈이다. 테스트의 유용성 코드만 만들어놓고 잘 돌아가겠거니 하고 무책임하게 개발을 마치려는 개발자는 아마 없을 것이다. 테스트랑 결국 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 테스트의 결과가 제대로 나오지 않는 경우에는 코드나 설계에 결함이 있음을 알 수 있다. 결국 최종적으로 테스트가 성공하면 모든 결함이 제거됐다는 확신을 얻을 수 있다. UserDaoTest의 특징 public class UserDaoTest { public static .. 2022. 6. 8.
[토비의 스프링 1장] 오브젝트와 의존관계 1장 오브젝트와 의존관계 스프링이 추구하고자 하는 가치 유연함 -자바의 잃어버린 객체지향 언어적 장점을 다시 살릴 수 있도록 도와주는 도구 단순함 - 뛰어난 확장성으로 다른 많은 프레임워크 등과 쉽게 결합하여 사용할 수 있도록 할 것 OOP의 장점을 최대한 살린 것이 스프링이고, 이것을 기반으로한 접근 방법을 사용하면 스프링이 추구하던 아키텍처, 설계의 근간이 흔들릴 일 없이 확장되어 결국은 확장된 코드마저도 스프링과 같이 확장성이 뛰어나고 유지보수가 쉬운 코드가 될 수 있다. 객체지향의 원칙 객체지향의 5원칙 SRP(Single Reponsibility Principle) : 단일 책임 원칙 하나의 클래스는 하나의 책임만을 가져야 한다. OCP(Open Closed Principle) : 개방-폐쇄 원.. 2022. 5. 10.