1-소개

소프트웨어를 올바르게 만드는 일은 어렵다. 소프트웨어를 제대로 만들려면 적정 수준의 지식과 기술이 겸비해야 한다. 소트웨어를 제대로 만들면 아주 적은 인력만으로도 새로운 기능을 추가하거나 유지보수할 수 있다. 변경은 단순해지고 빠르게 반영할 수 있따. 결함은 적어지고 잦아든다. 설계와 아키텍처란 설계와 아키텍처 사이에는 차이가 없다. 아키텍처는 고수준의 무언가를 가리킬 떄 흔히 사용되는 반면, 설계는 저수준의 구조 또는 결정사항 등을 의미할 떄가 많다. 저수준의 세부사항과 고수준의 구조는 모두 소프트웨어 전체 설계의 구성요소다. 이 둘을 구분 짓는 뚜렷한 경계는 없다....

2024-09-15 · 2 min · 262 words

1-새로운 인프라 환경이 온다

컨테이너 인프라 환경이란 컨테이너 인프라 환경은 컨테이너를 중심으로 구성된 인프라 환경이다. 컨테이너: 하나의 운영체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가벽고 빠르게 동작한다. 모놀리식 아키텍처 모놀리식 아키텍처: 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능을 통합돼 있는 구조를 의미한다. 장점: 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편하다. 단점: 서비스를 운영하는 과정에서 수정이 많을 경우, 어떤 서비스에서 이뤄진 수정이 연관된 다른 서비스에 영향을 미칠 가능성이 커진다....

2024-09-15 · 2 min · 405 words

1-사용자 수에 따른 규모 확장성

단일 서버 모든 컴포넌트가 한 대의 서버에서 실행되는 간단한 시스템 설계 사용자는 도메인 이름을 DNS에 질의하여 IP 주소로 변환한다. DNS는 보통 제3 사업자가 제공하는 유료 서비스를 이용하게 되므로, 우리 시스템의 일부가 아니다. DNS 주소 결과로 IP 주소가 반환된다. 해당 주소로 HTTP 요청이 전달된다. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다. 웹 앱: 비즈니스 로직, 데이터 저장을 위해 서버 구현용 언어(자바, 파이썬 등)를 사용하고, 프레제테이션용으로는 클라이언트 구현용 언어(HTML, 자바스크립트 등)을 사용한다....

2024-09-15 · 7 min · 1406 words

1-단위 테스트의 목표

단위 테스트 현황 기업용 애플리케이션 개발 프로젝트는 제품 코드와 테스트 코드 비율을 1:1에서 1:3 정도 된다. 테스트 작성에 그치지 않고 노력 대비 최대의 이익을 이끌어내는 방식으로 단위 테스트를 작성하는 것이 중요하다. 단위 테스트의 목표 코드 조각을 단위 테스트할 수 없으면 설계 품질이 낮은 것이지만, 코드 조각을 단위 테스트할 수 있다고 설계 품질이 좋은 것은 아니다. 단위 테스트 목표는 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다. 테스트를 작성하지 않으면 코드 베이스에서 무언가를 변경할 때마다 소프트웨어 엔트로피가 증가한다....

2024-09-15 · 4 min · 694 words

1-네트워크 첫걸음

네트워크의 구조 네트워크: 컴퓨터를 두 대 이상 연결하여 서로 데이터를 전송할 수 있는 통신망 인터넷: TCP/IP 프로토콜을 사용하는 세계 규모의 네트워크다. 전 세계의 컴퓨터를 서로 연결하여 정보를 교환할 수 있도록 만든 하나의 컴퓨터 통신망이다. 패킷: 네트워크 통신을 할 때 사용되는 작게 분할되는 데이터의 기본 단위다. 패킷으로 나누지 않고 한 번에 큰 데이터를 그대로 보내면 네트워크의 대역폭을 너무 차지해서 다른 패킷의 흐름을 막을 수도 있기 때문이다. 패킷이 순서대로 도착하지 않을 수도 있고, 패킷이 누락될 수도 있기 때문에 패킷에는 번호를 붙인다....

2024-09-15 · 2 min · 313 words

1-Vuejs에 대한 소개

Vue.js에 대한 소개 MVVM(Model-View-VIewModel) 패턴을 표방하고 있다. Model: 애플리케이션 도메인의 데이터 및 동작을 캡슐화하는 비즈니스 객체 View: 사용자가 보게되는 데이터 ViewModel: 모델과 뷰를 동기화하는 객체 코어 라이브러리는 ViewModel에 집주오디어있다. 코어 라이브러리를 제외하고도 Router나 Vuex 같은 라이브러리르 개발/배포하고 있다. 가상 노드 구성을 통해 매우 좋은 성능을 보여준다. 디렉티브: HTML에 사용되는 특별한 기호. 정의한 기능 혹은 연결된 변수의 값에 따라 DOM 엘리먼트를 변화시킨다. 디렉티브 중 v-model과 같은 디렉티브는 스크립트 코드의 변수와 양방향으로 바인드되어 실시근으로 DOM 엘리먼트에 변화를 줄 수 있다....

2024-09-15 · 2 min · 368 words

@RequestMapping같이 url을 파싱할 수 있는가

PathMathcer 또는 AntPathMatcher 를 사용하면 된다. 참고 자료 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html

2024-09-15 · 1 min · 9 words

@Profile, @ActiveProfile

profile 설정에 따라 다른 Bean을 사용하고 싶다면 @Profile을 사용할 수 있다. profile 설정에 따라 테스트를 끄고 켜고싶다면 @ActiveProfile을 사용할 수 있다. 참고 자료 http://wonwoo.ml/index.php/post/1933

2024-09-15 · 1 min · 24 words

@Async 사용하기

목표 @Async을 사용하는 이유를 이해한다. @Async의 사용 방법을 이해한다. @Async란? bean의 메소드에 @Async를 붙이면 별도의 스레드로 메소드가 실행된다. 호출한 쪽에서는 메소드 호출이 완료되기까지 기다리지 않는다. @Async 사용 방법 configuration @Async를 사용하기 위해서는 configuration에 @EnableAsync 를 추가해야된다. @EnableAsync @Configuration class AsyncConfig @EnableAsync의 옵션 annotation: 기본값으로는 @Async를 사용하지만 커스텀 애노테이션을 사요하고 싶을 때 사용할 수 있따. mode: advice의 종류를 나타낸다. PROXY와 AspectJ가 있다. proxyTargetClass: 프록시 모드를 사용할 때만 사용된다. CGLIB과 JDK가 있다. order: AsyncAnnotationBeanPostProcessor가 적용될 순서를 설정한다....

2024-09-15 · 2 min · 344 words

호스트 네임 vs 도메인 네임

도메인 네임: 넓은 의미로는 네트워크 상에서 컴퓨터를 식별하는 호스트명을 가리키며, 좁은 의미에서는 도메인 레지스트리에게서 등록된 이름을 의미한다. 호스트 네임: 네트워크에 연결된 장치들에게 부여되는 각각의 고유한 이름입니다. 우리가 도메인 주소를 생성하고 나면 서비스를 구분하기 위해 별도의 서브 도메인을 사용하기도 합니다. https://velog.io/@minjae-mj/호스트-네임과-도메인-네임

2024-09-15 · 1 min · 40 words

현재 시각 가져오기

CURRENT_TIMESTAMP 를 호출하면된다. SELECT CURRENT_TIMESTAMP AS current_date_time; ----------------------- 2019-02-23 20:02:21.550 (1 row affected) 참고 자료 https://www.sqlservertutorial.net/sql-server-date-functions/sql-server-current_time-function/

2024-09-15 · 1 min · 16 words

해당 문자열이 숫자인지 확인하는 방법

isNaN 함수를 사용하면 숫자가 아닌 경우 true, 아니면 false가 나온다. 참고 자료 https://stackoverflow.com/questions/175739/how-can-i-check-if-a-string-is-a-valid-number

2024-09-15 · 1 min · 13 words

하나의 쿼리에 여러 record 업데이트

목표 쿼리 하나로 여러 record의 값을 서로 다르게 업데이트 한다.(INSERT 문처럼) 방법 SQL에서 따로 제공하는 문법은 없다. CASE 문을 통해 구현해야 된다. UPDATE BANDS SET PERFORMING_COST = CASE BAND_NAME WHEN 'METALLICA' THEN 90000 WHEN 'BTS' THEN 200000 ELSE PERFORMING_COST END WHERE BAND_NAME IN('METALLICA', 'BTS'); 참고 자료 https://www.geeksforgeeks.org/how-to-update-multiple-records-using-one-query-in-sql-server/

2024-09-15 · 1 min · 47 words

필드의 리스트 순서 보장 문제

JPA를 사용하고 있을 때 DB가 리스트의 순서를 계속 유지시켜 줄 것이라고 믿으면 안된다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Room { @OneToMany(mappedBy = "room") private final List<User> users = new ArrayList<>(); ... } 이를 해결하기 위해, 유저가 방에 입장하는 시각을 따로 저장하여 그 순서를 보장하는 형태로 구현을 했다.

2024-09-15 · 1 min · 49 words

프로세스 이름에 특정 문자열을 가진 프로세스

pkill -f 'PATTERN' 참고 자료 https://unix.stackexchange.com/questions/316065/how-to-kill-all-process-with-given-name

2024-09-15 · 1 min · 6 words

페이징을 어떻게 표현하면 좋을까

두 가지 방법이 나왔었다. URI 경로: /rooms/pages/1 URI 쿼리: /rooms?page=1 페이지를 리소스로 취급하면 리소스간의 고유한 계층을 유지하기 힘들다는 단점이 있다. 예를들어 1번방으로 요청하려면 rooms/1 이라고 표현하고 싶은데 pages라는 리소스 때문에 불가능해진다. 따라서 페이지는 rooms라는 자원을 필터링하기 위한 하나의 표현이다. 따라서 URI 쿼리 방식을 선택했다. 참고 자료 https://www.baeldung.com/rest-api-pagination-in-spring

2024-09-15 · 1 min · 47 words

파일이름으로 디렉토리인지 확인

import os os.path.isdir(full_filename) 참고 자료 https://wikidocs.net/39

2024-09-15 · 1 min · 6 words

파일의 끝 부분에 개행을 넣어야 되는 이유

UNIX OS들의 호환성을 높여주기 위한 인터페이스 규격인 POSIX에 파일의 끝부분에 개행을 추가하라는 내용이 담겨있다. 참고 자료 https://blog.coderifleman.com/2015/04/04/text-files-end-with-a-newline/ https://velog.io/@doondoony/posix-eol https://minz.dev/19

2024-09-15 · 1 min · 19 words

파일을 통해서 ContentType 찾아오는 법

Java 표준 중에 Files.probeContentType() 메소드를 사용하면 쉽게 확인할 수 있다. @Test public void whenUsingJava7_thenSuccess() { Path path = new File("product.png").toPath(); String mimeType = Files.probeContentType(path); assertEquals(mimeType, "image/png"); } https://www.baeldung.com/java-file-mime-type 파일 이름만으로 유추하는 방법도 있다. String mimeType = URLConnection.guessContentTypeFromName(file.getName()); https://stackoverflow.com/questions/9670040/what-is-the-best-approach-to-identify-a-specific-file-type-in-java

2024-09-15 · 1 min · 38 words

파일 전체 읽기

@Test public void whenReadSmallFileJava7_thenCorrect() throws IOException { String expected_value = "Hello, world!"; Path path = Paths.get("src/test/resources/fileTest.txt"); String read = Files.readAllLines(path).get(0); assertEquals(expected_value, read); } Files를 이용하면 쉽게 파일 전체를 읽을 수 있다. https://www.baeldung.com/reading-file-in-java

2024-09-15 · 1 min · 32 words