Java 42

[java] 자바에서 스택과 힙의 차이

스택이란?- Stack 에서 heap 영역에 생성된 Object 타입의 데이터들의 참조를 위한 값들이 할당된다.- 원시 타입(primitive types)( byte, short, int, long, double, float, boolean, char)의 경우 실제 데이터 값이 할당된다.- 해당 method가 호출 되면 메모리에 할당되고 method가 종료되면 메모리가 해제된다.  Main 메서드 호출이 끝나고 Stack은 후입 선출 구조이기 때문에 아래와 같이 처리된다. 후입 선출 : 가장 최근에 요청된 것을 가장 먼저 처리, 가장 처음에 들어온 요청은 최후에 처리  스택 상태: 힙 이란? - Heap 영역에는 대체로 생명주기가 긴 데이터가 저장된다.- 모든 Object type(String, Arra..

Java 2024.10.06

[java]클래스가 상태값을 갖는다.

클래스에 상태값을 가지고 있는다는게 상황에 따라 고려해야된다. 먼저 상태를 가지고 있는 코드를 아래와 같다.해당 코드에서 상태를 확인하는건 speed 이다  상태를 가지는 것이 좋은 이유중에 가장 좋은건 객체의 고유한 상태를 가지고 있고 그 상태에 기반한 행동을 수행할 때 의미가 있습니다. 현실상태에서도 각각의 객체(사물)의 상태를 알수 있습니다, 예를 들어 컴퓨터의 상태, 의자의 상태 다양하게 객체들간의 상태값을 가지고 있습니다. 이 처럼 프로그래밍적으로도 객체의 상태값을 가지고 있으면 좋습니다. 하지만 대규모 트래픽에선 좋지 않은 방법이다. 즉 class에 대한 상태값을 가지고 있는게 안 좋다. 먼저 해당 상태로 테스트 코드를 작성하였다. 위에 대한 코드는 32개의 스레드가 1000번 실행 했을때 즉..

Java 2024.10.06

AWS Amazon Linux에서 java11 설치하기

젠킨스를 설치하는려고 하였는데 권장사항이 java8를 까려다가 java11이 권장사항으로 알람이 떠서 변경하는 작업을 하였습니다. 다행히 구글링해본 결과 해당 내용이 있어서 블로그에 남겨둠니다. yum list java*jdk-devel # 설치 가능한 jdk 확인 # java-1.6.0-openjdk-devel.x86_64 1:1.6.0.41-1.13.13.1.77.amzn1 amzn-main # java-1.7.0-openjdk-devel.x86_64 1:1.7.0.261-2.6.22.1.83.amzn1 amzn-updates # java-1.8.0-openjdk-devel.x86_64 AWS Amazon Linux에 8버전까지 있고 11버전이 없어서 새로 받아야된다. JDK 설치 # aws core..

Java 2021.09.16

[docker] Could not find tools.jar

필자의 개발환경은 mac 입니다. 혹시 비슷한 환경일수도 있지만... 혹시나해서 명시해둡니다.. 실제 로컬 자바는 1.8로 설치가 되어 있었고 해당 팀원이 도커기반으로 로컬 환경설정을 하자고 하여 주도적으로 능력자분이 도커 컴포즈로 설정을 하여 배포까지 완료하였습니다. 막상 실행을 하려고 하지만 두둥..... 해당 도커는... 실행이 되고 있어서 원인을 찾아보니... 환경변수 문제로 되었습니다. /usr/libexec/java_home -V | grep jdk 하여 두가지 값이 나왔고. 전에 환경설정은 앞에 1.8.301.09 (x86_64) 으로 잡혀 있어서 나타났습니다. 현재는 잘 설정이 되어 있고 해당 내용은 alias ll='ls -al' export JAVA_HOME=/Library/Java/J..

Java/Spring Boot 2021.08.14

spring boot global exception 처리

[본글은 지극히 개인 글입니다. 설명이 틀릴 수도 있습니다.] 토이프로젝트를 하면서 고민거리에 대한 내용입니다. 많은 개발자들은 에러처리에 대한 처리를 공통화해서 관리를 하고 싶어한다. 개발자들이 개발할떄 나의 경험상 예외처리 방식은 다양하다. 1. 메서드 내에 예측하여 try/ catch 문으로 예외를 처리한다. 필자는 이런방식으로 선택을 해봤다 2. 스프링 시큐리티 이용해서 예외처리 3. 해당 내용에 if문으로 예외처리 true / false 기반으로 예외처리 이러한 예외처리들을 적용하다보면 비즈니스 코드에 예외처리대한 내용 떄문에 코드 로직이 복잡해진다. 그렇게 되면 인수인계 받은 사람도/ 내가 개발을 하면서도 유지보수가 어려워진다. 그리고 에러코드 관리도 상당히 힘들고 혹시나 예러가 발생하면 일일..

Java/Spring Boot 2021.08.14

[Spring boot] AOP 란

본 글은 내가 이해한 내용 그대도 명시해뒀습니다. AOP가 필요한 상황 - 모든 메소드의 호출 측정 - 공통 관심 사항 vs 핵심 관심 사항 ex) 회원가입시간, 회원 조회 시간을 측정하고 싶다면? 문제 package hello.hellospring.service; @Transactional public class MemberService { /** * 회원가입 */ public Long join(Member member) { long start = System.currentTimeMillis(); try { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); } finally { ..

Java/Spring Boot 2021.01.27

[Spring Boot] AWS EC2 서버 환경 구축하기

안녕하세요 오개발입니다. 스프링부트 공부중에 기록용으로 남깁니다. AWS aws는 프리티어로 진행하였습니다. 인스턴스 시작 클릭 저는 우분투 18.04 사용하였습니다. 자신이 자신있는 서버로 선택하시면 될꺼 같아요 참고적으로 키 페어가 있어야되고 기본으로 SFTP로 시작합니다. 디폴트로 설정은 SSH post 22로 설정이 되어 있습니다. 서버 접속 저는 Xshell 6 으로 사용하였습니다. 디폴트는 "ubuntu" 입니다. sudo apt-get update get --version sudo apt install openjdk-11-jre-headless java --version // 11버전인지 확인 mkdir apps // 파일 만들기 git clone https://github.com/devSe..

Java/Spring Boot 2021.01.19

좋은 객체 지향 설계의 5가지 원칙(SOLID)

단일 책임의 원칙 - 한 클래스는 하나의 책임만 가져야된다. 개방- 폐쇄 원친 (OCP) - 다형성 -> 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다. -> 분명 다형성을 사용했지만.. OCP 원칙을 지킬수 없다.. 이부분을 수정하려면 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 리스코프 치환 원칙 (LSP) -> 기능의 대한 약속 ex) 자동차 엑셀은 앞으로 가야된다. 하지만 개발자의 의지로 엑셀은 뒤로 가게끔 구현은 가능하지만 리스코프 치환 원칙에 위배된다. 인터페이스 분리 원칙 인터페이스를 작게 기능적으로 분리 의존관계 역전 원친(DIP) - 추상화에 의존해야지 구체화에 의존하면 안된다.

Java 2021.01.17