
이번에 정보처리기사 시험에 합격하였습니다. 컴퓨터공학 전공 과목을 총 출동시켜 시험을 보는 과정이라 생각했습니다. 네트워크, 데이터베이스, 프로그래밍, 소프트웨어 공학 등등.. 공부했던 과목들이 모두 포함되어 있었습니다. 학교 공부 복습하는 겸, 그리고 남들 다 따는 것 나도 따야지 라는 마음으로 응시했던 것 같습니다. 필기는 cbt형식으로 진행됩니다. 그렇기에 어려운 부분은 없고, 기출만 3개년치(개정 이후) 돌린 후에 응시하여 합격했습니다. 실기가 어려운 부분이라 생각합니다. 서술형, 단답형, 프로그래밍 문제가 출제되는데, 이를 풀기 위해선 자세히 알아야 하기 때문입니다. 그래도 다행인 부분은 최근 서술형 문제가 줄어들고 있고, 프로그래밍 문제가 많이 출제되고 있습니다. 만일 시험에 대비하시는 분들이..

MyBatis의 특징, 언제 사용해야 하는지 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper SQL을 XML에 편리하게 작성할 수 있다. ( 자바 코드에서 사용하지 않아 혼동하지 않을 수 있음 ) 동적 쿼리를 편안하게 작성할 수 있다. // 자바에서 동적 쿼리 String sql = "select id, item_name, price, quantity from item"; //동적 쿼리 if (StringUtils.hasText(itemName) || maxPrice != null) { sql += " where"; } boolean andFlag = false; if (StringUtils.hasText(itemName)) { sql += " item_name like conca..

DTO(Data Transfer Object) - 데이터 전송 객체 기능은 없고, 데이터를 전달하는 용도로 사용하는 객체 용도를 명확하게 하기 위해 접미어로 사용하자 JdbcTemplate spring-jdbc 라이브러리에 포함, 스프링을 사용한다면 별도의 설정 없이 사용할 수 있다. 템플릿 콜백 패턴을 사용해서, 대부분의 반복 작업을 대신 처리해준다. SQL을 작성하여 파라미터를 설정하면 사용할 수 있다. ( ? 대신 : name 사용 가능 ) 동적 쿼리 문제를 해결하지 못한다. 파라미터 전달 방법 1. Map 사용 2. MapSqlParameterSource(SqlParameterSource의 구현체) 메서드 체인을 통해 편리하기 Sql 타입을 지정할 수 있다. 3. BeanPropertySqlPar..

자바 예외 Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다. Throwable : 최상위 예외이다. 하위에 Exception 과 Error 가 있다. Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. ( 언체크 예외 ) 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 상위 예외를 catch 로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문이다. 애플리케이션 로직은 이런 이유로 Exception 부터 필요한 예외로 생각하고 잡으면 된다. Excepti..

트랜잭션(Transaction) 우리가 데이터베이스를 사용하는 이유 중 하나인 개념 트랜잭션 트랜잭션은 하나의 작업을 안전하게 처리하도록 보장해주는 개념이다. 작업이 성공하여 데이터베이스에 정상 반영하는 것을 커밋, Commit 작업이 실패하여 이전으로 되돌리는 것을 롤백, Rollback 트랜잭션의 ACID Atomicity, 원자성 - 트랜잭션 내에서 실행한 작업은 모두 실패하거나 모두 성공해야 한다. Consistency, 일관성 - 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. Isolation, 격리성 - 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않게 격리한다. 격리 수준을 설정함 Durability, 지속성 - 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야..

우리가 데이터베이스 커넥션을 생성하고 접근할 때 매번 리소스를 사용해야 한다. 또한, 응답 속도에도 영향을 주기에 좋지 않은 결과가 나올 수 있다. 이 문제를 해결하기 위해 커넥션 풀(Connection Pool)이라는 방법을 사용한다. 말 그대로, 커넥션들이 존재하는 풀을 만들어 놓고 관리하는 것이다. 애플리케이션이 시작하는 시점에 필요한 커넥션(서비스마다 상이)을 커넥션 풀에 초기화 시켜놓는 것이다. 이 커넥션들은 DB와 TCP/IP연결이 되어 있기에 커넥션 풀에 요청하여 접근하면 된다. DataSource DataSource 활용하기 DriverManager의 경우 커넥션을 획득할 때마다 URL, USERNAME, PASSWORD 파라미터를 전달해줘야 한다. 반면, DataSource의 경우 처음 ..

중요한 데이터는 애플리케이션 서버를 거쳐 데이터베이스에 저장한다. 클라이언트의 요청에 따라 애플리케이션 서버는 데이터베이스에 접근하여 처리한다. 위 방식은 고전적인 데이터 처리 방식이다. 하지만 문제가 있다. 데이터베이스의 종류는 여러가지다.(MySql, Oracle ...) 그렇기에 데이터베이스에 맞는 포맷을 따로 적용해야 한다. 이를 위해 JDBC라는 자바 표준이 등장한다. JDBC(Java DataBase Connectivity) 표준 인터페이스를 정의하여 제공한다. java.sql.Connection - 연결 java.sql.Statement - SQL의 내용 java.sql.ResultSet - SQL 요청 응답 위 인터페이스와 각 데이터베이스 사에서 제공하는 라이브러리를 사용하여 기능을 만든다..

https://www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 문제 해결 방법 처음 문제를 접했을 때, 단순한 완전탐색 문제라고 생각했습니다. 사탕의 최댓값을 구하기 위해 모든 칸을 탐색하여 진행하는 방식을 떠올렸습니다. 마침 이동하는 범위도 (0,1) (1,0) (1,1) 이기에 범위도 신경쓸 부분이 줄어들었다 생각했습니다. 처음 작성한 코드는 아래와 같습니다. import java.io.*; import java.util.*; public ..

타임리프, Thymeleaf 특징 1. 서버 사이트 HTML 렌더링, SSR - 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용 2. 네츄럴 템플릿 : 순수 HTML을 유지하며 뷰 템플릿으로 사용할 수 있는 특징 - 순수 HTML을 최대한 유지하는 특징 - 웹 브라우저에서 파일을 직접 열어도 확인 가능하며, 서버를 통해 동적으로 변경된 결과 확인 가능 3. 스프링 통합 지원 - 스프링과 통합하여 여러 기능을 지원한다. 선언 텍스트 - text, utext 텍스트를 출력하는 기능 - 태그 없이 출력하는 기능 - [[${data}]] HTML 엔티티 웹 브라우저는 "

요구사항 분석 상품 도메인 모델 - 상품 ID, 상품명, 가격, 수량 상품 관리 기능 - 상품 목록(조회), 상품 상세, 상품 등록(C), 상품 수정(U) 타임리프 타임리프 선언 타임리프 핵심 th:xxx 가 붙은 부분은 서버사이드에서 렌더링되고, 기존 것을 대체된다. 붙지 않은 것은 html의 속성이 적용된다. html을 유지하면서 템플릿 기능을 할 수 있다. 타임리프 문법 속성 변경 - th:href="@{/css/bootstrap.min.css}", href="" 이 변경된다. 링크 표현 식 - th:href="@{/css/bootstrap.min.css}", url링크를 @{} 방식으로 사용한다. 리터럴 대체 - |...|, "와 '를 신경써야 했던 것을 "와 |로 사용한다. 반복 출력 - th:..