심심해서 하는 블로그 :: 심심해서 하는 블로그

1. Chocolaty Package Manager

Mac Book의 brew, RedHat 계열 리눅스의 yum, Python의 pip, Debian 계열 리눅스의 apt-get, NodeJS의 npm 등 Package Manager는 개발자들이 Commend Line 상으로 쉽게 Package를 설치하고 Upgrade 할 수 있는 편리한 Tool이다. 


Windows에서 일반적으로 MySQL을 설치하는 순서

1. MySQL 홈페이지로 간다. (구글 - MySQL 설치 검색 - 홈페이지 접속) 

2. MySQL 인스톨러를 다운로드 받은 뒤 실행한다.

3. 모니터를 가만히 쳐다본다.


RedHat 계열 리눅스에서 MySQL을 설치한다면

1. sudo yum install -y mysql

2. 끝



Command Line이 익숙하지 않는다면 직접 홈페이지를 찾아가서 설치하는 것도 좋지만, 리눅스나 Mac OS를 사용하다가 Windows에 환경설정을 하고자 하면, 귀찮다. 매우 귀찮다. 마침 새로운 개발 노트북에 개발 환경을 설정하는 과정에서 혹시 Windows에도 Package Manager가 있을까 했는데, Chocolaty라는 Package Manager가 있었다.


설치 과정  

https://chocolatey.org/install 로 접속하게 되면 PowerShell 또는 cmd로 설치가 가능한 명령어를 제공한다.



Windows PowerShell을 이용해서 밑의 코드를 복사-붙여넣기 후 실행을 하면 혼자서 열심히 동작을 수행한다. 완료가 된 후에 choco라고 명령어를 타이핑했을 때, 아래 그림처럼 버전 정보를 제공하면, 성공적으로 설치가 완료된 것이다. 




패키지 검색 / 설치 / 갱신 / 삭제  

설치가 완료되었으면 한 번 실행을 해보자. Sublime Text를 다운로드하기 위해 우선 Sublime Text가 Choco에 등록되어 있는지 확인하는 절차를 먼저 가진다.  cmd나 PowerShell 실행할 때 관리자 권한으로 실행을 해야 패키지를 정상적으로 설치 할 수 있다. 

choco search sublime



와.. 많기도 하다.  우리는 그 중에서 SublimeText3를 설치해 보자. 

choco install -y sublimetext3


설치가 끝났다. 설치 경로는 C:\Program Files\Sublime Text 3에 설치되어있다. 간혹 C:\tools나 C:\ProgramData 경로에 설치되는 패키지도 있다. Sublime Text 3을 저는 잘 사용하지 않기 때문에, 다시 삭제하도록 하겠다.


choco uninstall sublimetext3 


update나 upgrade를 이용하면 버전을 최신 버전으로도 관리가 가능하다. Windows에서도 이런 툴을 사용할 수 있어서, 나중에 포맷이나 새로운 컴퓨터를 또 얻는다면, Command만 파일에 잘 저장하여, 실행하면 간단하게 개발 환경을 구성할 수 있을 것으로 기대한다.


 



,


전체 소스 코드 : https://github.com/ssooni/ssoonidev_blog

Spring Boot : ver 1.5.9

JAVA : ver 1.8 

Build Tool : MAVEN


1. 목표

사용자가 View를 통해 데이터를 조회하여, 새로운 데이터를 입력하거나 기존 데이터를 삭제, 수정이 가능한 웹페이지를 작성하는 것이 이번 포스팅의 목표입니다.


2. pom.xml

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
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 
<!-- MYSQL -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
 
<!-- JSP / JSTL -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
 
cs


해당 Spring Boot 프로젝트에 필요한 Dependency Library를 추가해 줍니다. 

주요 라이브러리를 간단하게 소개하고 넘어가죠.


mybatis-spring-boot-starter

Mapper라는 아주 좋은 기능을 가지고 있는 Persistence Framework MyBatis를 사용합니다. 

JDBC만으로 코드를 작성하면 PrepareStatement, Connection 등을 사용하여 연결하고, 데이터베이스의 결과를 직접 매핑을 해야 하는 번거로움이 있었는데 @Mapper 와 설정 파일을 이용하면, MyBatis가 매핑까지 해줘서 간단하게 코딩이 가능합니다. 


mysql-connector-java

정형 데이터베이스 MySQL와 연결을 위해 사용하는 라이브러리입니다. Spring Boot의 설정 파일 application.properies에 작성한 URL과 mysql User 정보 등을 읽고 데이터 베이스에 접근합니다.


3. MySQL 테이블 생성

1
2
3
4
5
6
7
create database ssooni;
use ssooni;
create table board(
    bno int auto_increment primary key
    userName varchar(10),
    contents text );
insert into board(userName, contents) values("ssooni""Welcome!!");
cs


(MySQL 설치 및 설정 방법은 추후에 포스팅할 예정입니다.) 

MySQL Workbench나 cmd(또는 bash)를 이용하여 MySQL 데이터베이스에 접속해봅시다.

그 후, 위의 쿼리를 이용해서 데이터베이스를 생성하고 해당 데이터베이스에 사용할 board 테이블을 만들고, 데이터베이스에 Sample 데이터를 입력하는 과정까지 진행해 봅시다.


그리고 테이블 생성과 데이터 입력이 잘 되었는지 확인해 봅시다.

desc [테이블 명] 과 select * from [테이블 명]을 이용하여 위의 그림처럼 조회가 된다면 성공입니다.


4. application.properties 설정

1
2
3
4
5
6
7
8
## View Path Config ## 
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
 
## Mysql Config ##
spring.datasource.username=ssooni
spring.datasource.password=ssooni
spring.datasource.url=jdbc:mysql://localhost:3306/ssooni?useSSL=false
cs


Spring Boot로 개발을 하면서 가장 괜찮았던 점은 properties 파일에 모든 설정값을 넣어 관리가 가능하다는 점입니다. yaml 파일 형태로도 물론 관리가 가능하며, 이전 프로젝트에서 활용한 경험이 있습니다. 



가장 첫 번째 단락은 jsp 파일이 있는 경로와 확장자를 지정하는 설정입니다. 기존 Spring Framework에서는 xml 파일을 뒤져서 해당 경로를 지정하는 방법을 쓰는데, xml에 비하면 가독성이 아주 좋은 편이라 편리하네요. 참고로 webapp/WEB-INF/view/ 경로는 위의 그림 파일처럼 직접 폴더를 생성해야 합니다. 


두 번째 단락은 MySQL의 URL 정보와 DB 로그인을 위한 ID / PW 정보를 설정합니다. 

URL의 구조는 보통 jdbc:mysql://[ host ip ] : [ host port ] / [ database name ] ? [ option ]으로 구성됩니다. 따라서 지금 저는 localhost의 3306번 포트에 ssooni라는 데이터 베이스에 접근하는 거죠. 

useSSL은 패킷을 암호화하는 Secure Socket Layer의 사용 여부를 설정하는 건데 database에 SSL 설정을 안 했기 때문에 사용하지 않음(false) 옵션을 주었습니다.


5. 설정 끝!! 프로그래밍 하자.

VO 또는 DTO 또는 Domain 클래스 작성

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
package com.example.domain;
 
public class BoardDomain {
    
    private int bno;
    private String userName;
    private String contents;
    
    // GETTER AND SETTER + TOSTRING
    public int getBno() {
        return bno;
    }
    public void setBno(int bno) {
        this.bno = bno;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getContents() {
        return contents;
    }
    public void setContents(String contents) {
        this.contents = contents;
    }
}
 
cs


사람들마다 다르게 명명하지만, 아무튼 비슷하게 사용하고 있는 모델 클래스입니다. 데이터 베이스의 각각의 칼럼에 대응하게 작성하여, 조회 결과를 담을 수 있고 새로운 칼럼을 추가하기 위해 데이터베이스에 데이터를 실을 때 사용하는 클래스입니다. 사실상 getter와 setter, Log에 이쁘게 남기기 위한 toString() 함수로 구성된 아주 간단한 클래스입니다.


Annotation 작성 vs mapper.xml 작성

다음은 Mapper Interface 작성입니다. Mapper Class 하나는 MySQL 데이터베이스의 테이블 하나와 대응합니다. MyBatis는 xml 파일 또는 Annotation을 이용해서 쿼리를 설정하고 데이터베이스에 접근을 합니다. 저는 두 가지 다 이용해 보려고 합니다. 각각의 장단점은 분명히 있으니깐요.


선택 1) Annotation 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Mapper
public interface BoardMapper {
    
    @Select("SELECT * FROM board WHERE bno = #{bno}")
    public List<BoardDomain> findByBno(@Param("bno"int bno);
    
    @Insert("INSERT INTO board(userName, contents) VALUES(#{userName}, #{contents})")
    public void insert(BoardDomain board);
    
    @Update("UPDATE board SET contents=#{contents} where bno=#{bno}")
    public void update(BoardDomain board);
    
    @Delete("DELETE FROM board where bno=#{bno}")
    public void delete(@Param("bno"int bno);
 
}
cs

com.example.dao.BoardMapper.java 코드


MySQL로 할 수 있는 조회(@Select), 생성(@Insert), 갱신(@Update), 삭제(@Delete)를 할 수 있는 코드입니다. @Mapper Annotation과 각각의 함수마다 어떤 쿼리를 수행하는지를 작성하는 것이 끝입니다. 이 방법은 쿼리가 단순한 경우에 사용하면 좋습니다. 


선택 2) Mapper.xml 작성 

1
2
3
4
## Mapper Config ##
mybatis.type-aliases-package=com.example.domain
mybatis.mapper-locations=mapper/**/*.xml

cs


xml 파일로 mapper를 설정하려면 우선 application.properties에 mapper의 위치와 domain 패키지를 추가로 설정해줍니다. domain 패키지는 나중에 mapper.xml에서 resultType을 지정할 때  com.example.domain.BoardDomain 형태가 아닌 BoardDomain으로 간략하게 적기 위해 설정했습니다.

그리고 mapper-locations은 resourse 폴더 안에 mapper 폴더를 만든 후 설정해주시면 됩니다.


 

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
 
<mapper namespace="com.example.dao.BoardMapper"
    <select id="findByBno2" parameterType="Integer" resultType="BoardDomain"
        SELECT * FROM borad WHERE bno = #{bno} 
    </select
</mapper>
 
public List<BoardDomain> findByBno(@Param("bno") int bno);
 
/cs

/resource/mapper/BoardMapper.xml(11번째 줄은 제외)


11번 줄의 코드와 같은 결과를 보여주는 xml 파일을 하나 생성하였습니다. 물론 <insert>등도 가능합니다. 가장 위의 DTD를 입력하면 Ctrl + space 자동 완성을 지원해줘서 작성하기 편리해집니다. 


namepspace에는 mapper를 사용할 인터페이스 명을 사용합니다. 저는 선택 1번에서 사용한 BoardMapper.java 파일을 그대로 사용할 예정입니다. 그리고 parameterType과 resultType을 설정해줍니다.


1
2
3
4
5
6
7
8
9
@Mapper
public interface BoardMapper {
    
    @Select("SELECT * FROM board WHERE bno = #{bno}")
    public List<BoardDomain> findByBno(@Param("bno"int bno);
    
    //중간 생략
    public List<BoardDomain> findByBno2(int bno);
}
cs

com.example.dao.BoardMapper.java


아까 작성한 BoardMapper.java에 findByBno2 함수를 다음과 같이 작성했습니다. xml 작성 방법의 장점은 동적 SQL처럼 복잡한 쿼리를 사용할 때 Annotation 보다 훨씬 수월하게 작성할 수 있다는 점입니다.  


Service 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.service;
 
import java.util.List;
 
import com.example.domain.BoardDomain;
 
public interface BoardService {
 
    public List<BoardDomain> findByBno(int bno);
    public List<BoardDomain> findByBno2(int bno);
    public void insert(BoardDomain board);
    public void update(BoardDomain board);
    public void delete(int bno);
 
}
cs

com.example.service.BoardService.java


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
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.example.service.impl;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.example.dao.BoardMapper;
import com.example.domain.BoardDomain;
import com.example.service.BoardService;
 
@Service
public class BoardServiceImpl implements BoardService{
 
    
    @Autowired
    BoardMapper boardMapper;
    
    @Override
    public List<BoardDomain> findByBno(int bno) {
        return boardMapper.findByBno(bno);
    }
        
    @Override
    public List<BoardDomain> findByBno2(int bno) {
        return boardMapper.findByBno2(bno);
    }
 
    @Override
    public void insert(BoardDomain board) {
        boardMapper.insert(board);
    }
 
    @Override
    public void update(BoardDomain board) {
        boardMapper.update(board);
    }
 
    @Override
    public void delete(int bno) {
        boardMapper.delete(bno);
    }
    
}
cs

com.example.service.Impl.BoardServiceImpl.java


"아니.. DAO랑 똑같은데 굳이 또 해야 해???" 

이런 질문을 주변에서 간혹 받기도 합니다. 앞서 말했듯이 DAO는 테이블 당 하나씩 연결되는 것이라면 Service는 비즈니스 또는 기능당 하나씩 사용하는 겁니다. 지금은 Service 클래스가 데이터 베이스의 테이블을 하나 밖에 안 쓰는 경우이지만 , 하나의 기능 상에 테이블을 두 개 이상 사용하는 경우가 실제 프로젝트에서 상당히 많습니다. 예를 들면 게시물을 작성하는 동시에 게시물 History 테이블에 이력을 저장하는 경우가 대표적입니다.


6. Test

여기까지 수행하면 데이터베이스에 데이터를 읽는 코드를 작성해서 데이터를 잘 불러오는지 테스트를 진행해보겠습니다. controller 패키지와 그 안에 BoardController Class를 생성하고 아래 코드를 작성해 봅시다.


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
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.servlet.ModelAndView;
 
import com.example.domain.BoardDomain;
import com.example.service.BoardService;
 
@Controller
public class BoardController {
 
    @Autowired
    BoardService boardService;
    
    @GetMapping("/test")
    public ModelAndView readTest() {
        List<BoardDomain> boardList = boardService.findByBno(1);
        ModelAndView nextPage = new ModelAndView("board/readTest");
        nextPage.addObject("boardList", boardList);
        return nextPage;
    }
}
cs
com.example.controller.Boardcontroller.java

그리고 화면을 보여줄 JSP 파일도 만들어 줍니다. view 폴더 안에 board폴더를 생성한 후 readTest.jsp 파일을 생성해 아래와 같이 작성해 줍니다.


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
32
33
34
35
36
37
38
39
40
 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
 
<title>Test Read Data</title>
</head>
<body>
    <div class="container">
        <h2>Board</h2>
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>bno</th>
                    <th>contents</th>
                    <th>userName</th>
                </tr>
            </thead>
            <tbody>
                <c:forEach var="board" items="${boardList}">
                    <tr>
                        <td>${board.bno}</td>
                        <td><a href="#">${board.contents}</a></td>
                        <td>${board.userName}</td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
    </div>
</body>
</html>
cs


결 과 


다음 포스팅에서는 Controller와 View에 대하여 알아보는 시간을 갖도록 해볼게요.

도움이 되셨으면 좋겠습니다.

 

,

정보처리기출_2006~2015.zip

1. 합격했습니다!!





2017년에 지금까지 제가 한 일 중에 가장 잘한 일이라고 생각해요.

직접 서울 공단에 가서 자격증을 수령했습니다. 여권같이 생긴 게 멋있더라고요.

저는 2017년 1차 필기와 1차 실기 시험을 쳤고요. 그동안 공부를 했던 경험들을 떠올리면서 포스팅을 진행할게요

시험을 준비하시는 많은 분들께 도움이 될 수 있었으면 합니다.

(참고로 저는 4학년 소프트웨어학과 전공자입니다)


2. 필기 공부방법

공단에서 2017년부터 정보처리기사 시험의 유형을 다르게 하겠다고 선언했었습니다. 이제 겨우 시험을 칠 자격을 얻었는데 실기는 서술형으로 나온다고 하질 않나.. 필기시험은 어렵게 낸다 하질 않나. 운이 지지리도 없다고 생각했어요. 그래도 4년 동안 대학교에서 공부를 했으니까 어느 정도는 알겠지 했는데, 기출문제를 풀어보니까 막상 그런 건 또 아니더라구요.(이럴려고 4년 공부했나.. 자괴감 들고...)




저 같은 경우에는 자격증 공부를 할 때, 책 없이 하기에는 많이 힘이 들어서 시나공 summary 정보처리기사 필기 책을 사용했습니다. 이 책은 정말 간단한 요약정리와 기출문제들로 구성되어 있어요. 그리고 필기 기출문제 파일을 따로 얻어서 문제를 풀었습니다. 파일로 첨부해 드렸으니까 공부하실 때 요긴하게 사용하세요. 


저는 일단 파일에 있는 기출문제를 2012년부터 2015년까지 출력해서 문제를 풀었습니다. 

프린트한 문제를 풀고 나서, 오답을 체크할 때 summary 책을 이용해서 어떤 개념이 있었는지를 프린트한 기출문제에 다시 적어서 암기를 하고 넘어가는 방법으로 매 회를 진행하였습니다. 


기출문제를 공부하시다 보면 반복되는 문제가 한두 문제씩 나옵니다. 이 문제 같은 경우에는 반드시 꼭꼭꼭 집고 가시는 게 좋습니다. 실제 시험을 치면 생판 처음 보는 문제들도 있지만, 오아시스 같은 이런 문제들이 빈번하게 출제됩니다. 심지어 답도 똑같이 출제되는 경우도 있으니까 과락을 면하기 위해서 반드시 꼭 공부하시길 바랍니다.


보통 필기를 공부하신 분들 후기를 보면 전자계산기 구조 과목과 데이터 통신 과목이 어렵다고 하시는 분들이 많습니다. 저도 또한 저 두 과목이 가장 공부하면서 어렵다고 느낀 점이 범위가 넓고, 외울 게 너무 많습니다.  특히 데이터 통신은 프로토콜을 외우는 게 정말 힘들었습니다. 그래서 복습을 할 때에도 이 두 과목에는 좀 더 신경을 쓰면서 공부를 했습니다. 파트별로 공부를 하시는 분들은 데이터베이스, 운영체제, 소프트웨어 공학을 먼저 공부해서 점수를 끌어올리고 나머지 두 과목에서 과락을 면하자는 목표를 가지고 공부를 하는 게 좋습니다.  먼저 공부하는 3과목의 경우에는 기출 문제에서 반복되는 문제가 많고, 외우는 게 어렵다고  두 과목보다는 적습니다. 


필기시험은 과목당 30분씩 2시간 반 동안 시험을 보고 절반 이상 시간이 지나면 퇴실이 가능합니다. 

수능 과학 탐구영역처럼 30분씩 딱딱 정해서 과목별 시험지를 배부하는 것은 아닙니다. 모든 과목이 있는 시험지를 배부하고 순서도 원하는 데로 푸시면 됩니다. 그리고 시험지는 나중에 집에 가져가실 수 있는데, 시험이 끝나고 6시쯤에 가채점 답안이 공단에서 공시합니다. 그 동안 시험치신 분들이 이의를 제기할 수도 있고, 그게 받아 지는 경우 문제의 답도 달라질 수 있으니. 시험 결과가 나올 때까지 가채점은 그냥 가채점이라고 생각하시면 마음 편합니다. 실제로 제가 친 시험에도 문제에 오류가 있어서 해당 문제에 답이 없다라고 정정되었습니다.



전자 계산기 과목에 조금 더 많이 신경을 쓰다 보니 전자계산기 과목 점수가 높게 나왔어요. 물론 찍은 것도 어느 정도 맞아서 높은 점수가 나왔을 뿐이지 그동안 공부하면서 푼 기출문제의 평균은 60점대 초반을 왔다 갔다 했었어요. 필기는 다시 말씀드리지만 기출문제를 정확하게 푸는 것이 가장 중요하다고 생각합니다.


 3. 실기 공부방법

필기를 무사히 통과하고 실기 준비를 시작했어요. 예전에는 실기도 객관식이고 데이터베이스와 알고리즘을 어느 정도 맞추면 사실상 합격이라 사람들이 저 두 과목만 공부를 하고 합격을 하는 사례가 많아지자 공단에서 싹 다 서술형, 단답식으로 변경하겠다고 공언해 버렸죠.


실기 책도 역시 시나공으로 준비했습니다.

실기는 3시간 동안 시험을 치며, 총 20문제에 합격은 60점이상, 문제마다 배점은 각각 달리되어 있습니다.


알고리즘 - 25점

데이터베이스 - 25점

업무 프로세스 - 15점

전산영어 - 10점

IT 신기술 동향 및 시스템 관리 - 25점 


저는 일단 알고리즘과 데이터 베이스는 무조건 다 맞추겠다고 목표를 세웠습니다. 전공 수업으로 웬만한 것은 풀 수 있고, 신기술 동향이나 전산 영어는 외워야 할 범위가 엄청 많습니다. 거기다가 영어 풀네임을 요구하는 문제가 간혹 있기 때문에 외우기 부담이 되는 경우도 있어요. 이 두 과목은 매일매일 어느 정도 범위를 정해놓고 꾸준히 보는게 중요한 거 같습니다. 시간이 없다면 보안에 관련된 전산 영어를 보고 가시는 걸 추천합니다. 


알고리즘은 C / Java의 입출력문, 연산식, 조건문 등 간단한 문법과 문제를 푸는 방법에 대해서 이해를 하면 충분히 맞출 거라고 생각해요. 데이터 베이스는 쿼리문, 관계 대수, 정규화를 집중적으로 공부했습니다. 알고리즘은 전체 코드를 코딩하는 개념보다는 빈칸에 들어가야 할 코드에 대하여 푸는 문제가 나왔었고, 데이터베이스는 요구하는 사항에 대한 쿼리를 작성하는 문제가 나왔습니다. 


직접 데이터베이스나 컴파일러를 설치해서 실행해 보는 것이 이해하는데 가장 편하겠지만, 이쪽으로 갈 생각 없이 단순히 스펙으로 자격증을 따겠다고 생각하신 분들은 교재에 나온 문제를 모두 풀어보는 것이 좋습니다. 알고리즘과 데이터베이스는 약간의 암기 + 많은 응용을 요구하기 때문에 문제를 많이 풀면서 이해하는 것이 좋습니다.


업무 프로세스는 엄청 긴 지문을 읽고 각각에 해당되는 부분을 찾아 넣는 문제가 나왔는데, 시험 치기 전에 간단하게 몇 문제를 풀어보면 어려움 없이 문제를 해결하실 수 있을 거라 생각합니다. 



서술형으로 변경된 후 처음으로 치러진 시험이라 그런지 1회 난이도는 생각했던 것보다 쉬웠습니다. 답안 채점도 생각보다 후하게 준 거 같아요. 인터넷에 떠도는 가채점 답안으로 채점한 결과보다 높은 결과가 나오면서 무사히 합격했습니다. 시험을 친지 꽤 오래돼서 문제에 대한 기억과 공부한 방법에 대해서 가물가물하긴 해요. 하지만 궁금하신 걸 물어보신다면 답변해 드리겠습니다. 다들 좋은 결과 있으시길 바랍니다. 


도움이 되셨다면 밑에 공감 하트 한 번씩만 눌러주세요. 하트는 저에게 큰 힘이 됩니다.

,