분류 전체보기 77

무엇을 테스트할 것인가? 어떻게 테스트할 것인가?

테스트 코드를 작성하면 개발 과정에서 문제를 미리 발견할 수도 있고, 리팩토링도 할 수 있고 좋은 점이 많다. 이는 현재의 나, 미래의 나 그리고 코드를 받게 될 동료에게까지 안정감과 자신감으로 연결된다. 무엇을 테스트할 것인가에 대한 답으로 설계를 테스트 한다라고 영상에서 말했다. 그 말을 듣고 돌이켜보니 그동안 테스트를 위한 테스트를 코드를 작성하지 않았나라는 생각이 들었다. 어떤 것을 테스트해야 좋은지 어떤 것을 테스트 해야하는지에 대해서 다시 생각하게 되었다. 어떻게 테스트해야할 것인가에 대한 이야기도 있었고 참고삼아 보면 좋을 것 같다. 무엇을 테스트해야하는지, 어떻게 테스트해야하는지, 그리고 테스트의 궁극적인 목표가 무엇인지가 핵심일 것 같다. https://www.youtube.com/wat..

세미나 2022.08.11

URI / URL / URN

URI(Uniform Resource Identifier): 인터넷에 있는 자원을 나타내는 유일한 주소, 하위 개념으로 URL, URN이 있다. URL(Uniform Resource Locator): 웹 페이지를 찾기 위한 주소 URN(Uniform Resource Name): 자원의 고유 name 예를 들어 보면, https://example.com 은 URI이면서 URL https://example.com/test 는 아직까지 path를 나타내므로 URI이면서 URL https://example.com/test/index.html 은 자원의 위치를 나타내므로 URI이면서 URL https://example.com/test/1 뒤에 붙은 1은 특정 식별자로 주소를 나타내지 않기 때문에 URI https..

CS/Network 2022.08.10

함수 종속

함수 종속성이란 DB 속성들간 종속관계를 뜻한다. 예를 들어, 사원번호가 다른 동명이인을 가지는 테이블이 있다고 하자. 사원번호에 따라 반드시 이름이 정해지지만 이름에 따라 반드시 사원번호가 정해지지 않는다. 따라서, 이름은 사원번호에 종속된다라고 할 수 있다. 이 때, 사원번호를 결정자, 이름을 종속자 라고한다. 사원번호 -> 이름 * 완전 함수 종속: 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우 * 부분 함수 종속: 릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을 경우 종속자가 기본키를 구성하는 속성 중 일부에만 종속되는 경우 * 이행적 함수 종속: 릴레..

DB 2022.08.09

val, var, const, const val

* val: 값이 변경되지 않는 경우에 사용(java final과 유사) * var: 일반적인 변수의 특성과 같음 * const: 상수, 한 번 초기화하면 바꿀 수 없음, 변수 선언할 때 val 앞에 const 를 붙여서 만듦 ex) const val a = "test" * const val 과 val 차이 val은 값이 런타임 시에 결정된다. 프로그램 수행에 따라 값이 바뀔 수 있음 fun main() { val num = sum(40, 20) println(num) } fun sum(a: Int, b: Int) = a + b const val은 값이 컴파일 시에 결정된다. 클래스의 생성자에 할당할 수 없으며, String을 포함한 기본 자료형으로만 선언 가능 함수 내 지역 변수나 클래스의 속성으로 사..

Backend/Kotlin 2022.08.09

Expression과 Statement

* Expression(식, 표현식): 어떠한 값을 가지고 있으면 그것을 표현식이라고 부를 수 있다. 예를 들어, 5 // 리터럴 (수) "hello" // 리터럴(문자열) 2+7/4 // 산술 식 sum(7, 4) // 함수 리턴 값 myName; // 변수에 들어있는 값 등이 있다. java에서는 표현식만으로 코드 블럭안에서 단독으로 쓰일 수 없다. * Statement(문장, 상태): 어떠한 작업을 수행하는 모든 문장을 뜻한다. 예를 들어, int age = 14; // age++; // Statement 이면서 Expression sum(age, 1); // Statement 이면서 Expression https://gusdnd852.tistory.com/68 Expression과 Statemen..

Reflection(리플렉션)

런타임시에 클래스 정보를 확인해서 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 자바 API 사용자가 직접 활용할 일은 잘 없지만 IDE의 자동완성, 스프링 프레임워크의 어노테이션 같은 기능이 사용되는 예이다. 설계할 때는 어떤 타입의 클래스인지 모르지만 실행 시점에 클래스에 대한 정보를 확인하고 활용할 수 있도록 하는 것이다. https://brunch.co.kr/@kd4/8 자바의 리플렉션 java reflection를 이해하시나요? | Java Reflection API를 이해하시나요? 리플렉션이란 개념은 초보 자바 개발자에게는 생소한 개념이고, 이해하기 힘든 개념인 것 같습니다. 일단 저에겐 그랬습니다. 그 brunch.co.kr

Backend/Java 2022.08.08

tag

특정 커밋을 가리키는 링크 커밋은 수정이 가능하나, 태그는 수정이 불가능하다. 읽기전용 커밋 같은 개념 보통 소프트웨어 버전을 릴리즈 할 때마다 사용 버전은 semantic version을 참고하면 된다. https://dev-coco.tistory.com/51 [Git] Git 버전관리 - 태그(Tag) 조회, 생성, 삭제, 올리기 태그(Tag)란? git에서 태그란 무언가 표시를 해두기 위한 태깅 기능을 위한 것으로, 특정 커밋을 가리키는 링크라고 생각하면 될것같다. 커밋과 태그의 차이점이라고 한다면 커밋의 경우 내용을 dev-coco.tistory.com

etc/git 2022.08.04

쿠키와 세션

쿠키와 세션은 http 프로토콜의 특징이자 약점을 보완하기 위해서 사용한다. http 프로토콜은 connectionless, stateless의 특징을 가지고 있다. connectionless: 클라이언트가 서버에 요청 했을 때 그 요청에 맞는 응답을 보낸 후 연결을 끊는 방식 stateless: 커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보를 유지하지 않는다. 실제로는 데이터 유지가 필요한 경우가 많은데 로그인을 했는데 페이지를 다시 불러올 때마다 로그인을 다시 한다거나 로그인 시 아이디 저장을 체크했는데도 불구하고 아이디가 저장이 되어있지 않다거나 하는 것이 대표적인 예이다. 그래서 쿠키와 세션을 사용한다. 쿠키는 클라이언트에 저장하는 정보 파일이다. 클라이언트에 저장하였다가 필요 ..

CS/HTTP 2022.08.03

직렬화

Java 내부 시스템에서 사용되는 객체나 데이터를 외부에서 사용할 수 있도록 Byte 형태로 변환하는 것을 의미한다. 프로그램 데이터들이 연속적으로 있지 않고 내부 포인터에 의해 참조되고 있는데 이 데이터들을 한데 모아 다른 곳에서도 쓸 수 있도록 연속적(serial)인 형태로 변환하는 것 대부분 OS의 프로세스 구현은 서로 다른 가상메모리주소공간(Virtual Address Space)를 갖기 때문에 Object 타입의 참조값(주소값) 데이터 인스턴스를 전달 할 수 없다. 그렇기 때문에 서로 다른 메모리 공산 사이의 데이터 전달을 위해서는 메모리 공간의 주소값이 아닌 Byte 형태로 변환된 객체 데이터를 전달하면, 사용하는 쪽에서 역직렬화하여 사용할 수 있다. 즉, 전송/저장 가능한 데이터를 만드는 것..

Backend/Java 2021.06.12

추상클래스와 인터페이스

인터페이스는 클래스를 구현하기 전에 설계하거나 다형성을 고려할 때 쓰곤 했는데 추상클래스는 구현된 것을 보기만 했을 뿐 잘 써본 적이 없다. 인터페이스와 추상클래스는 비슷하다는 느낌을 가지고 있었기에 더욱 쓰지 않았던 것 같다. 이참에 한 번 정리해보자. Interface란? 인터페이스는 한 마디로 설계도라고 생각하면 될 것 같다. 모든 메서드가 추상메서드이고, 일반 변수를 가질 수 없다.(선언하면 public static final 변수, 생략가능) 인터페이스를 구현하는 클래스는 모든 메서드를 강제로 구현해야한다. 다른 인터페이스로부터 상속 받을 수 있고, 다중 상속이 가능하다. interface Vehicle { void run(); // interface 예약어를 쓰면 abstract는 생략 가능하..

Backend/Java 2021.06.11