부제: Checked Exception Unchecked Exception 비교 프로그램은 항상 개발자가 의도한대로 동작하지 않는다. 이것들을 오류(Error)나 버그(Bug)로 자주 일컫는다. JAVA에서는 '오류'를 다루기 위해 Throwable 이라는 클래스를 활용한다. Oracle은 Throwable에 대해 아래와 같이 소개했다. The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can ..
부제: Node.js Nosql 연동법. Node.js의 mongodb모듈을 활용하여 mongodb를 연동하는 도중 라는 오류를 마주쳤다. 한참을 헤맨 끝에 간단히 해결되었지만, 나같은 고민을 하는 사람들이 더 쉽게 고민을 해결했으면 하는 마음에 삽질로그를 남긴다. 먼저, 내가 간단하게 만들어본 프로그램은 화면에서 id와 password를 입력받아 DB에 존재하는지 검증하고, 로그인 성공여부를 보여주는 기능을 한다. db연동은 아래와 같이 했다. 먼저 DB연결하는 function이다. // // 기본 모듈 선언 및 미들웨어 선언 생략 var MongoClient = require('mongodb').MongoClient; var db; // 연결 받아올 변수(중요) function connectDB() ..
객체 중에는 시스템 전체에 딱 하나만 존재해야 유리한 것들이 있다. 대표적으로 스레드 풀이나 캐시, 각종 설정정보 등이 있다. 이들의 인스턴스가 두 개 이상 존재하게 되면 시스템에 좋지 않은 영향을 끼친다. (작게는 자원낭비, 크게는 프로그램 오류) 객체(인스턴스)를 시스템 전체에 딱 하나 존재하도록 처리하기 위해 전역변수를 사용해도 되지만, 전역변수는 원하는 때에 생성할 수 없다는 단점이 있다. 그래서 사용하는 것이 싱글턴패턴(Singleton Pattern)이다. 싱글턴 패턴을 어떻게 구현하는지 지금부터 '자세히' 알아보자. 먼저, 싱글턴패턴은 시스템 전체에 딱 하나만 존재하게 하기 위해 생성자를 아무나 접근할 수 없게 막고, 스스로 인스턴스를 관리한다. 아래 코드를 보면 명확해 질 것이다. publ..
★관련 링크Spring과 DB이야기 - 1. DataSource와 JdbcTemplateSpring과 DB이야기 - 2. JdbcTemplate에서의 UPDATE, INSERT 데이터베이스 트랜잭션(Database Transaction)은 데이터베이스에서 상호작용의 단위라고 할 수 있다. 연관된 두 개 이상의 쿼리를 실행할 때, 모든 작업이 끝났을 때 COMMIT을 수행하고 중간에 오류가 발생하면 ROLLBACK하는 것이 기본이다. (트랜잭션을 잘 모른다면 여기를 클릭) 트랜잭션을 JAVA에서 구현한다면 아래와 같을 것이다. Connection conn = null; try { conn = DriverManager.getConnection(jdbcUrl, user, pw); conn.setAutoComm..
부제: @Autowired @Resource 차이, Spring @Qualifier, Spring Annotation 종류 Spring의 핵심 개념 중 하나인 DI는 Dependency Injection의 약자이다. 이 포스팅에서는 DI와 의존(Dependency)에 대한 자세한 설명은 하지 않고, 위키피디아의 설명으로 대신하겠다. 프로그래밍에서 구성요소간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴 중의 하나이다. 한편, 특정 객체에 의존 객체를 주입하는 방식은 두가지이다. 1. 생성자를 통한 주입. 2. Setter 메소드를 통한 주입. 이는 각각 XML로 아래와 같이 구현할 수 있으며, xml파일에 의존관계를 설정하는 것을 명시적 의존 주입이라고 한다. ..
★관련 링크Spring과 DB이야기 - 1. DataSource와 JdbcTemplateSpring과 DB이야기 - 3. Transaction 처리 지난 포스팅에서 DataSource의 개념과 Spring에서 DataSource를 활용한 JdbcTemplate으로 간단한 SELECT 쿼리를 작성해봤다. 이번 포스팅에서는 UPDATE와 INSERT에 대해 짚어보겠다. JdbcTemplate을 활용하여 INSERT, UPDATE, DELETE 쿼리를 실행할 때는, update() 메소드를 사용하면 된다. update() 메소드는 아래와 같다. - int update(String sql) - int update(String sql, Object... args) int 형태의 리턴을 하는데, 쿼리 실행 결과로 ..
부제: Spring으로 JDBC연동하기, Spring으로 DB조회하기 ★관련 링크Spring과 DB이야기 - 2. JdbcTemplate에서의 UPDATE, INSERT Spring과 DB이야기 - 3. Transaction 처리 JDBC의 구현과 DataSource JAVA를 활용하여 애플리케이션을 개발할 때, DB접근이 필요하면 보통 JDBC를 쓴다. JDBC를 사용해본 사람이라면 아래와 같은 방식으로 개발했을 것이다. public Student getSingleStudent (String studentNum) throws SQLException { Student student; try(Connection conn = DriverManager.getConnection ("jdbc:oracle:this..
String과 StringBuilder, StringBuffer는 모두 문자열을 저장 및 관리하는 클래스이다. 아래와 같은 방식으로 생성 가능하다. String str1 = new String("abc"); String str2 = "abc"; StringBuilder str3 = new StringBuilder("abc"); StringBuffer str4 = new StringBuffer("abc"); 참고로, StringBuilder와 StringBuffer의 생성자의 파라미터로 CharSequence 인터페이스를 구현한 모든 클래스를 사용할 수 있다. CharSequence를 구현한 클래스로는 CharBuffer, String, StringBuffer, StringBuilder가 있다. Strin..
컴파일할 때는 문제가 없던 프로그램도 동작 도중에 종종 오류가 발생한다. 사용자가 항상 개발자의 생각대로 프로그램을 사용하지 않기 때문이다. 숫자만 입력해야하지만 문자열을 입력하기도 하고, 파일을 업로드하기 전 파일의 이름을 지정하지 않기도 한다. 이럴 때 발생하는 오류를 사전에 방지하는 것은 중요하다. 그런데 개발자가 이러한 오류가 발생할 때마다 프로그램이 종료되는 것을 원치 않을 수 있다. 오류를 무시하고 싶을 수도 있고, 그 오류가 발생 했을 때 수행할 적절한 동작을 직접 정의하고 싶을 수도 있다. 이럴 때 활용하는 것이 try-catch-finally 구문이다. public class Main { public static void main(String[] args) { int [] arr = ne..
부제: IntelliJ에서 S3 연동하기, Spring Boot AWS 연동 이번 포스팅에서는 Spring Boot에서 Spring Cloud AWS를 활용하여 S3를 연동하는 법을 알아보겠다. 절차는 크게 3가지(의존성 설정, Properties 파일 설정, 구현)로 나눌 수 있다. 1. 의존성 설정 Spring Cloud AWS를 활용하면, 의존성만 추가해도 간편하게 AWS의 모든 기능을 활용할 수 있다는 장점이 있다. 아래 내용을 build.gradle에 추가하자. (버전은 알아서 적절히 넣도록 한다.) 12compile("org.springframework.cloud:spring-cloud-aws-context:${springCloudVersion}")compile("org.springframew..