서버 메모리 누수 현상 처리 과정 정리
2022. 2. 24. 21:32
개발 지식/DevOps
현재 AWS 환경으로 서버를 운영 중에 있는데 메모리 초과로 서버가 계속 다운되는 현상이 지속적으로 발견되었다 워낙 사양이 낮아서 그런가 했지만 서버 상황을 모니터링을 하다 보니 메모리가 계속해서 누적되는 게 원인인 것 같았다 타 부서에서 사용하는 서버인 데다가 python 환경이어서 지식이 아예 없는 상황이었다.. 우선은 python을 다뤄본 적이 없어서 그 부분부터 파악이 필요했다 1. 파이썬의 메모리 관리 Python에서는 GC(Garbage Collection)와 레퍼런스 카운트(Reference Counts)에 의해 메모리 관리를 하고 있지만, 순환 참조(자기 자신을 참조)와 같은 코드가 있으면 메모리 누수가 발생할 수 있음. 2. 테스트 계획 조사한 내용에 의하면 소스 코드가 문제인가 싶어서 ..
클린코드 - 1.깨끗한 코드 & 2.의미있는 이름
2022. 2. 20. 15:00
개발 서적/클린코드
0. 깨끗한 코드 "나중은 결코 오지 않는다." - 르블랑의 법칙 나중에 돌아와서 다시 정리하겠다는 생각은 하지말자 나쁜 코드가 쌓일수록 생산성은 떨어지고 청소할 방법이 없어진다 그렇다면 깨끗한 코드란 무엇일까? 공통적으로 얘기하는 깨끗한 코드의 특징은 중복을 피하고, 한 기능만 수행, 제대로 표현, 작게 추상화 즉, 읽기 쉽고 유지보수성이 좋은 코드이다 1. 의도를 분명히 밝혀라 책에서는 의도가 분명한 이름은 정말로 중요하다는 사실을 거듭 강조한다 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다 변수, 함수, 클래스 등의 이름만으로 존재 이유, 수행 기능, 사용 방법을 유추할 수 있도록 신경 써서 지어야 한다 따라서 주석이 필요하다면 의도를 분명히 드러내지 못했다는 뜻..
페이징 라이브러리 (PageHelper + pagination)
2022. 2. 4. 14:52
개발 지식/Memo
Spring 환경에서 mybatis 또는 ibatis를 사용할 경우 PageHelper와 Pagination 라이브러리를 사용하면 아주 간단하게 페이징 작업이 가능하다 (JPA를 사용할 경우 Pageable을 사용) PageHelper 1. 환경에 맞게 라이브러리를 추가 (SpringBoot 기준) pom.xml com.github.pagehelper pagehelper-spring-boot-starter 1.4.1 2. import 추가 import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; 3. 사용 예시 import com.github.pagehelper.PageHelper; import com.github.pa..
REST API JunitTest(MockMvc)
2022. 1. 27. 22:42
개발 지식/Memo
Spring 에서 Was를 실행 하지 않고 Web URL을 테스트 하는 방법 웹을 개발할 때 매번 URL을 테스트하기 위해 Tomcat과 같은 WAS를 실행하는 불편한 단계를 생략하기 위해서 스프링의 테스트 기능을 활용한다. GET 방식이 아니고, POST 등의 방식으로 지정되어있으며, JSON 형태의 데이터를 처리하는 것을 브라우저에서 개발하려면 많은 시간과 노력이 들어감 때문에 Junit과 spring-test를 활용하는 것을 권장 자세한 내용은 주석으로 기재 TicketVO.java package org.zerock.domain; import lombok.Data; @Data public class Ticket { private int tno; private String owner; private ..
MockMvc Annotation 정리
2022. 1. 26. 22:12
개발 지식/Memo
MockMvc의 @Annotation @RunWith(SpringRunner.class) @RunWith(SpringRunner.class) 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킴 여기서는 SpringRunner라는 스프링 실행자를 사용 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 함 @WebMvcTest @WebMvcTest 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션 선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있음 단 @Service, @Component, @Repository 등은 사용할 수 없음 @Autowired @Autowired 스프링이 관리하는 빈(Be..
REST Controller 반환 타입 정리
2022. 1. 25. 21:40
개발 지식/Memo
@RestController 반환타입 JSP와 달리 순수한 데이터를 반환하는 형태이므로 다양한 포맷의 데이터 전송 가능 주로 많이 사용 형태 : 일반문자열, JSON, XML 등 produces는 MIME TYPE을 의미 일반 문자열 반환 @Controller에서는 문자열 return값이 jsp 파일의 이름으로 처리되지만, @RestController에서는 순수한 문자열로 처리 됨 SampleController.java package org.zerock.controller; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.w..
JavaBeans
2022. 1. 25. 21:36
개발 지식/JAVA 기본 지식
JavaBeans JavaBean의 정의 데이터를 표현하는 것을 목적으로 하는 자바 클래스 컴포넌트와 비슷한 의미로도 사용됨 JavaBean 규격서에 따라 작성된 자바 클래스를 가리킴 EJB(Enterprise Java Beans) 와 혼동해선 안됨 JavaBeans의 관례 클래스는 패키지화 하여야 한다. 클래스는 직렬화 되어야 한다. (클래스의 상태를 지속적으로 저장 혹은 복원시키기 위해) implements java.io.Serializable 클래스는 기본 생성자를 가지고 있어야한다. public TestClass() {} 멤버변수는 프로퍼티(Property)라 칭한다. 프로퍼티의 접근자는 private이다. 프로퍼티마다 getter/setter 가 존재해야 하며, 그 이름은 각각 get/set으로..
REST Annotation 정리
2022. 1. 25. 19:41
개발 지식/Memo
REST의 @Annotation 전송방식에 따른 Annotation 전송방식에 따른 어노테이션 작업 HTTP Method URI 예제 어노테이션 Operation Performed 등록(Create) POST /members/new @PostMapping 리소스를 가져옴 조회(Read) GET /members/{id} @GetMapping 정의된 의미가 없으면 자원을 생성 수정(Update) PUT /members/{id}+body(json데이터 등) @RequestMapping 자원을 생성하거나 업데이트 삭제(Delete) DELETE /members/{id} @DeleteMapping 자원을 삭제 예제 package org.zerock.controller; import java.util.List; i..
POJO(Plain Old Java Object)
2022. 1. 24. 18:35
개발 지식/JAVA 기본 지식
POJO Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. - 위키백과 오래된 방식의 간단한 오브젝트란? 특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 의미 예를 들어 특정 기술을 사용할 때 특정 프레임워크만 그 기술을 지원하여, 특정 프레임워크에 직접 의존해야 하는 순간 POJO라고 할 수 없음. 특정 기술(프..
OOP(Object Oriented Programming 객체 프로그래밍) 정리
2022. 1. 24. 18:34
개발 지식/JAVA 기본 지식
객체지향 OOA(Object Oriented Analysis) : 객체 분석 OOD(Object Oriented Design) : 객체 설계 OOP(Object Oriented Programming) : 객체 프로그래밍 객체지향 키워드 클래스(Class) 오브젝트(Object) 캡슐화(Encapsulation) 상속성(Inheritance) 다형성(Polymorphism) 클래스(Class) 클래스(class) = 추상화(abstract) 클래스는 표현 대상의 특징에 대한 서술을 의미 (공통적인 특징을 서술) 추상은 사용자가 구체적인 내용을 생각하지 않고도 사용하는 기능 프로시져 추상화 : 함수 데이터 추상화 : 구조체, 배열, 포인터 attribute = data = member variables = ..