네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

'전체 글'에 해당되는 글 194건


반응형

2020년 정보처리기사 실기 시험 합격 후기

 

되게 늦은 합격 후기네요.

아무튼 2020년 개정 후 정처기 실기 시험에 합격했습니다.

시험 날짜는 7월 25일이었고 발표는 8월 28일이었습니다.

 

 

 

 

 

 

필기시험은 시나공으로 공부했고 실기는 수제비란 책으로 공부했습니다!

지금 시나공 책, 수제비 책 둘 다 동기랑 선배한테 줘서 저한테 없어 사진을 못 찍은 게 아쉽네요.

 

 

필기시험 후기

2020년 정보처리기사 필기 시험 합격 후기

2020년 정보처리기사 필기 시험 후기 그리고 !!향후 계획!! 계속 되는 시험 연기, 바쁜 일정 등등으로 정처기 시험 걱정 많았는데 결국은 2020년 6월 시험 잘 치구 왔어요! 3과목을 제외한 다른과목��

frogand.tistory.com

 

실기시험은 객관식인 필기시험과는 다르게 서술형과 단답형 문제들이 있어서 공부를 좀 더 했던 것 같아요.

아래는 제가 외웠던 단어와 설명입니다. 단어를 보면 서술할 수 있도록, 설명을 보면 단어가 생각나도록 외웠습니다!

 

 

 

 

 

 

출처

수제비 책, 족보 등에 나온 서술형 예상문제

대한민국 모임의 시작, 네이버 카페

cafe.naver.com

카페 가입 후 볼 수 있습니다.

위 서술형 예상문제 보고 프린트한 거고 보충할 부분, 제가 모르는 부분, 헷갈리는 부분, 중요하다고 생각되는 부분도 필기해놓았어요! 참고하셨으면 좋겠습니다. 수제비 카페에서 주는 데일리 문제가 꽤 좋으니 풀어보시길 추천합니다. 저는 시험 3일 전에 알아서 몰아서 풀면서 외웠습니다.

 

참고로 파이썬 문제도 나왔었는데 제가 알기론 실기에 나오는 언어가 java, c, python으로 알고 있습니다.(확실하지 않음) 저는 파이썬은 배운 적이 없어 몰랐고 주언어가 자바랑 씨 언어라, 설마 파이썬이 나오겠어? 싶었는데 나와서 당황했습니다. 결국 한 문제를 날렸습니다. 아쉬웠는데 그래도 합격해서 다행이네요... 지금 실기 준비하시는 분들은 언어공부도 꼼꼼히 하시길!!

 

 

그리고 서술형 문제 자체는 논란이 없도록 최대한 후하게 채점해주는 느낌이 들었습니다.

중요 포인트만 들어가면 맞게 해 주시는 것 같았습니다.

대신 단답형 같은 경우는 철자가 틀리기만 해도 감점이었던 것 같아요. 단답형인 경우 영어로 작성하는 문제도 있었던 것으로 기억하니 꼼꼼히 외우는 것을 추천드려요.

 

 

아무튼 실기시험은 단답형과 서술형으로 출제되니 꼼꼼하게 공부하셔서 합격하셨으면 좋겠습니다.

 

 

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

백준 11004번 문제부터 얘기하자면 어렵지 않은 난이도인데 시간 초과로 계속 풀지못했던 문제

 

일단 학교에서 배운 quick sort와 quick select에 대해서 설명해보고자 한다.

 

1. quick sort (퀵 정렬)

1) 배열 나누기

임의의 값을 기준으로, 기준 값보다 작은 값들은 배열의 앞부분으로 이동하고, 기준 값보다 큰 값들은 배열의 뒷부분으로 이동하는 알고리즘.

 

기준 값: 입력 배열의 끝 값 (혹은 중간 값)

1구역: 기준 값보다 작거나 같은 값들이 위치할 곳

2구역: 기준 값보다 큰 값들이 위치할 곳

3구역: 아직 비교하지 않아서 위치가 정해지지 않은 값들

 

2) partition 구현

static void swap(int[] a, int i, int j) { 
  int temp = a[i];
  a[i] = a[j];
  a[j] = temp; 
} 
static int partition(int[] a, int start, int end) { 
  int value = a[end]; // 기준값 
  int i = start - 1; // i는 1구역의 끝지점
  for (int j = start; j <= end - 1; ++j) // j는 3구역의 시작 지점 
  if (a[j] < value) // a[j] 값이 1구역에 속하면 
    swap(a, ++i, j); // a[j] 값을 1구역의 끝에 추가한다. 1구역 크기 1증가. 
  swap(a, i + 1, end); // 기준값인 a[end] 원소와 2구역의 시작 원소를 교환한다. 
  return i + 1; // 기준값 위치 리턴 
}

3) 퀵 정렬 구현

static void quickSort(int[] a, int start, int end) {
  if (start >= end) 
    return; 
  int middle = partition(a, start, end); // 배열 나누기 
  quickSort(a, start, middle-1); // 1구역 정렬 
  quickSort(a, middle+1, end); // 2구역 정렬 
}

4) 퀵 정렬 수행 시간

partition 메서드의 수행시간은 O(n)이다.

평균

quickSort 메서드의 재귀 호출 횟수의 평균은 logn이다.

따라서 퀵정렬의 평균 수행시간은 O(nlogn)이다.

 

최선

partition 메서드가 배열을 정확히 1/2로 나눈다면, 재귀호출 횟수는 logn이고

따라서 퀵정렬의 최선일 때 수행시간은 O(nlogn)이다.

 

최악

partition 메서드가 배열을 0: n-1 크기로 나눈다면, 재귀호출 횟수는 n이다.

따라서 최악일 때, 퀵 정렬 수행시간은 O(n^2)이다.

 

 

=> 최악인 경우가 있기 때문에 기준값을 중간값으로 바꾸고 해보았지만 역시 시간 초과

 

2. quick select 

static void swap(int[] a, int i, int j) { 
  int temp = a[i]; 
  a[i] = a[j]; 
  a[j] = temp; 
} 

static int partition(int[] a, int left, int right) {
  int mid = (left + right) / 2;
  swap(a, mid, right);
  int pivot = a[right];

  int j = left - 1;
  for (int i = left; i < right; i++) {
    if (a[i] < pivot) {
		swap(a, i, ++j);
	}
  }
  j++;
  swap(a, right, j);
  return j;
}

// a 배열의 start~end 에서 nth 번째 작은 값을 리턴한다. 
static int select(int[] a, int start, int end, int nth) {
  if (start >= end) 
    return a[start]; // 찾을 배열의 크기가 1 이면 리턴 
  int middle = partition(a, start, end); // 배열 나누기 
  int middle_nth = middle - start + 1; // middle 위치의 값이 start~end 에서 middle_nth 번째 작은 값 
  if (nth == middle_nth) 
    return a[middle]; // 찾았으면 리턴 
  if (nth < middle_nth) 
    return select(a, start, middle-1, nth); // 앞 부분에서 찾는다.
  else 
    return select(a, middle+1, end, nth - middle_nth); // 뒷 부분에서 찾는다. 
}

근데 이렇게 해도 안된다. 대체 왜 (띠용)

partition 메소드에서 위 코드처럼 기준값을 중간값으로 바꿔줬는데도 시간초과가 뜬다.

 

3. 백준 11004번 문제

partition 메소드에 문제가 있는 것 같아서 아래의 메소드로 바꿨는데 시간초과가 뜨지 않는다.

사실 무슨 차이가 있는지 모르겠다. 암튼 아래 메소드로 바꾸니 됨...

(위 partition 메서드와 아래 partition 메소드의 차이점을 모르겠어요.. 아시는 분 댓글, 메일, 아무거나 부탁드립니다ㅜㅜ)

public static int partition(int[] array, int left, int right) {
	int mid = (left + right) / 2;
	swap(array, left, mid); // 중앙 값을 첫 번째 요소로 이동

	int pivot = array[left];
	int i = left, j = right;

	while (i < j) {
		while (pivot < array[j]) { // j는 오른쪽에서 왼쪽으로 피봇보다 작거나 같은 값을 찾는다.
			j--;
		}

		while (i < j && pivot >= array[i]) { // i는 왼쪽에서 오른쪽으로 피봇보다 큰 값을 찾는다.
			i++;
		}
		swap(array, i, j); // 찾은 i와 j를 교환
	}
	// 반복문을 벗어난 경우는 i와 j가 만난경우
	// 피봇과 교환
	array[left] = array[i];
	array[i] = pivot;
	return i;
}

 

 

전체 코드 확인 백준 11004번 문제 자바

 

jeon9825/TIP

✒️오늘 연습한 것을 정리하는 저장소✒️ Today I Practice . Contribute to jeon9825/TIP development by creating an account on GitHub.

github.com

donaricano-btn

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

2020년 정보처리기사 필기 시험 후기 그리고 !!향후 계획!!

 

계속 되는 시험 연기, 바쁜 일정 등등으로 정처기 시험 걱정 많았는데

결국은 2020년 6월 시험 잘 치구 왔어요!

 

3과목을 제외한 다른과목은 80점 3과목은 90점, 평균 82점으로 안전하게 합격했어요. (전공자입니다...)

 

 

솔직한 후기를 남겨보자면 필기시험은 약 한 달정도 시나공이란 책으로 공부했습니다.

 

 

 

두께가 얇은 책은 아니라 5권으로 분리해서 봤구요.

한과목씩 잘라서 공부했습니다.

 

깊게 공부하는 것보다는 자주 여러번 보면서 공부해서 하루에 1~2과목정도 "읽었다고" 보면 될 것 같아요.

그냥 읽으면서 기억해야하는 것을 복기하는 편이고 따로 필기는 하지않았고 인강도 안들었어요.

저의 공부스타일이 원래 설렁설렁 그래도 자주.....인 느낌이라 딴사람이 보면 쟤 공부안하네...싶을 정도긴 해요.(ㅋ)

집중해서 공부하는 건 학교시험 벼락치기일 경우고 보통은 최대한 길게 잡고 여러번 보는 스타일이에요!

그래서 한 달이란 시간 잡고 공부했는데...암튼 후략

 

3과목이 제일 어려울 거라고 생각하기도 했고 데이터 베이스를 공부 안 한지 좀 오래돼서 최대한 미뤘었는데

심화부분까진 책에 안적혀있더라구요! 그래서 편하게 공부함.

 

 

 

그리고 시험 전날에 대충 중요해보이는 것 휘갈겨서 갔습니다. 

에이포용지 양면으로 3장정도 나오더라구요.

시험 직전 대기하면서 봤어요. 쓸 때는 검정색 볼펜으로만 작성하고 시험 날 아침에 빨간색 볼펜으로 한 번 더 확인하면서 공부했어요.

 

근데 문제는 시나공에서 중요하게 다룬 개념들이 시험에 많이 안나왔다는 거에요.

처음보는 개념들도 많아서 시험볼 때 당황했어요.....(정말임 진심임)

사실 거의 찍은 게 많이 맞았고 평소에 공부한 것도 조금 나와서 저 정도의 점수가 나왔다고 생각해요.

운이네요 (...)

 

 

 

점점 산으로 가는 후기

 

 

 

필기시험은 집 근처 고등학교에서 봤는데

실기시험 신청 기간을 까먹어서 대학교 근처 고등학교에서 봅니다...

종강을 이제해서 3주 남았는데 열심히 공부해볼게요(공부 의욕 0에 수렴)

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

목차

1. Spring Boot 프로젝트 생성 및 설정

2. Spring Boot 프로젝트와 RDS MySQL 연동 후 CRUD 메서드 구현

3. Android에서 Retrofit을 사용해서 REST API와 통신

 

참고사항

1. 졸업 프로젝트(임시 프로젝트명 : LIE)을 진행하였을 때 

2. 사용한 소프트웨어는 STS 4.5.1MySQL Workbench, PuTTY 등이있으며, Java 빌드 도구로는 Maven을 사용하고 있습니다. 

3. AWS 이용할 수 있다는 가정하에 진행됩니다. 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/26

4. REST API의 이론 개념은 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/17

5. 간단한 데이터베이스를 만들어 놓은 상태입니다. project 스키마Member 테이블을 생성하였습니다.

CREATE TABLE `Member` (
  `id` varchar(45) NOT NULL,
  `name` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

1. Spring Boot 프로젝트 생성

1) 프로젝트 생성

[File - New - Spring Starter Project]

Type : Maven / Packaging : Jar로 설정하고

Name, Group, Package 명을 입력한다. 

Spring Web/ MySQL Driver/ Spring Data JPA 를 선택하고 [Finish] 버튼 클릭

 

2) application.properties

src/main/resources/application.properties

# API 호출시, SQL 문을 콘솔에 출력한다.
spring.jpa.show-sql=true

# DDL 정의시 데이터베이스의 고유 기능을 사용합니다.
# ex) 테이블 생성, 삭제 등
spring.jpa.generate-ddl=true

# MySQL을 사용한다.
spring.jpa.database=mysql

# MySQL 설정
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul
spring.datasource.hikari.username=user1
spring.datasource.hikari.password=test1234

# MySQL 상세 지정
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.database=mysql
spring.jpa.show-sql=true

application.properties는 spring Boot 설정 파일이다.

MySQL 설정에서 hikari를 써준 이유는 hikari Connection Pool를 사용하기 위함이다. hikariCP를 사용하지 않을 경우 그냥 spring.datasource.diver-class-name 등으로 작성하면 된다.

 

* spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul

 

1. database-1.(생략).ap-northeast-2.rds.amazonaws.com 대신에 본인 AWS의 엔드 포인트를 입력한다.

2. project 대신에 본인 스키마를 입력한다.

3. useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul 은 MySQL 설정하는 부분이다. utf-8로 인코딩 설정, 서버 타임존을 아시아로 설정하였다.

 

* spring.datasource.hikari.username=user1

* spring.datasource.hikari.password=test123

 

데이터베이스에 연결할 계정을 지정한다. 본인의 데이터베이스를 설정한대로 작성한다.

 

* spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

 

엔터티 클래스의 studentNumber 속성에 자동으로 연결될 데이터베이스 필드 명이

studentNumber 형태이면 이 설정이 필요하다. (camel case)

student_number 형태이면 이 설정이 필요없다. (snake case)

 

3) pom.xml

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
		<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
		<exclusions>
			<exclusion>
				<groupId>org.junit.vintage</groupId>
				<artifactId>junit-vintage-engine</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.apache.tomcat.embed</groupId>
		<artifactId>tomcat-embed-jasper</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>com.zaxxer</groupId>
		<artifactId>HikariCP</artifactId>
		<version>3.1.0</version>
	</dependency>
</dependencies>

오류 방지를 위해 모든 라이브러리 의존성을 첨부합니다. 

 

4) 테스트용 컨트롤러

TestController.java

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

	@RequestMapping("/")
	public String index() {
		return "Hello!";
	}
}

[프로젝트 마우스 우클릭 - Run As - Spring Boot App]을 클릭해야 실행이 된다.

localhost:8080 에 접근하면 Hello! 텍스트가 보인다.

2. 엔터티 클래스 구현

Member.java

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Member {
	@Id
	private String id;
	private String name;
	private String password;

	public Member() {

	}

	public Member(String id, String name, String password) {
		this.id = id;
		this.name = name;
		this.password = password;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

 

3. 레포지토리 구현

MemberRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import kr.ac.skhu.project.domain.Member;

@Repository
public interface MemberRepository extends JpaRepository<Member, String>
{
	
}

 

4. 컨트롤러 구현

APIController.java

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import Member;
import MemberRepository;

@RequestMapping("/member")
@RestController
public class APIController {

	@Autowired
	private MemberRepository memberRepository;

	@RequestMapping(value = "/select", method = { RequestMethod.GET, RequestMethod.POST })
	public List<Member> selectAll() {
		return memberRepository.findAll();
	}

	@RequestMapping(value = "/insert", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public Member insert(@RequestBody Map<String, String> map) {
		return memberRepository.save(new Member(map.get("id"), map.get("name"), map.get("password")));
	}
}

웹브라우저에서 http://localhost:8080/member/select

URL을 GET 방식으로 요청하자.

서버가 전송하는 JSON 포멧 데이터를 웹브라우저에서 볼 수 있다.

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

목차

1. Amazon Web Service 이용

2. Amazon Web Service에 MySQL 연동

3. Amazon Web Service RDS 이용

1. 데이터베이스 생성

https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#

 

[데이터베이스 생성] 버튼 클릭

 

[MySQL]을 선택하고 맞는 버전을 선택해주면 된다.

 

[프리티어]를 선택

 

마지막에 [스토리지 자동 조정 활성화] 버튼을 해제한다.

 

스크롤을 내려 [데이터 생성] 버튼을 클릭한다.

 

생성 완료

 

2. 파라미터 그룹 생성 / 접속 권한 설정

좌측에서 [파라미터 그룹]을 선택 후 [파라미터 그룹 생성] 버튼을 클릭

[그룹 이름][설명]을 작성 후 [생성] 버튼 클릭

 

character 를 검색하고 [파라미터 편집] 버튼 클릭

 

아래 항목을 utf8로 변경하고 [변경 사항 저장] 버튼 클릭

character_set_client: utf8

character_set_connection: utf8

character_set_database: utf8

character_set_filesystem: utf8

character_set_results: utf8

character_set_server: utf8

 

collation을 검색하고

아래 항목도 변경하고 [변경 사항 저장] 버튼 클릭

collation_connection: utf8_general_ci

collation_server: utf8_general_ci

 

좌측에서 [데이터 베이스]를 선택

해당 DB 선택 후 [수정] 버튼 클릭

[DB 파라미터 그룹]을 방금 만든 mysql57kor로 변경한다.

[보안 그룹]launch-wizard-1으로 수정해준다.

 

하단의 [계속] 버튼 클릭

[즉시 적용]으로 변경 후 [DB 인스턴스 수정] 버튼 클릭

 

3. MySQL Workbench에서 연결

[엔드포인트] 주소 복사

MySQL Workbench에서 [Database - Manage Connections] 클릭

Connection Name 입력

Hostname에 복사한 엔드포인트 주소를 붙여넣기

user 에 RDS 데이터베이스를 생성할 때 입력한 사용자 이름 입력

password까지 입력하면 워크밴치와 연결 완료

 

 

 

728x90
반응형

'web > AWS' 카테고리의 다른 글

[AWS] 2. Amazon Web Service에 MySQL 연동  (0) 2020.05.09
[AWS] 1. Amazon Web Service 이용  (0) 2020.05.09
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !