분류 전체보기 32

GC(Garbage Collector) 관련

현업에서 일하다 보니 OOM도 만나게 되고, 메모리 누수, 원인모를 에러 등.. 많은 부분을 겪어보게 되었다. 개인 프로그램에서는 신경도 쓰지 않았던 것들을 생각해야 했고, 원인을 해결하기 위해서 폭 넖은 생각과 다양한 지식이 필요했다. 그 중 중요하게 생각하는 것 중 하나는 GC이다. GC란? Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 JVM의 프로세스이다. 장점 : 개발자가 안쓰는 힙 영역 객체를 지우거나 하는 작업을 안해도되며, 힙영역의 메모리가 부족해지면 알아서 작동한다. 단점 : GC가 언제 작동하지 모르며, Major GC가 동작할 때는 모든 쓰레드가 멈추며, 이를 Stop-The-World 라고 부른다. 학교 다닐 때,..

OOM(Out Of Memory) 관련

초보 개발자(본인)가 입사 후 첫번째 프로젝트가 끝나고, 다른 프로젝트를 하러 갔다. 어느날, 이전 프로젝트의 사람을 만나서 이야기를 하는데 이전의 코딩방식의 문제점을 듣고 꼭 고쳐야겠다는 생각과 함께 이 글을 작성하게 되었다. 메모리 : 컴퓨터가 연산을 위해 참조하는 공간이다. 그림 참조 : https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/ 프로그램을 실행하게 되면, OS는 메모리에 실행할 프로그램의 소스코드를 올린다. 이를 코드 영역이라고 한다. 프로그램이 사용하는 전역변수, 정적변수는 데이터 영역 사용자의 동적 ..

02. 변수와 타입

변수란? 값을 저장할 수 있는 메모리 공간 -> 메모리 공간을 차지한다. 현업에서는 메모리가 한정이 되어 있으므로 무작정 크게 만들지 않게 조심하자. 1. 변수의 선언 : 메모리 주소에 붙여진 이름 타입 + 변수이름 ; int test; 2. 변수에 값을 저장 : 대입 연산자(=)를 이용하여, 좌변의 변수(메모리공간)에 값(데이터)를 저장하는 것 int score = 100; (score라는 메모리 공간에 100이라는 값을 저장) 리터럴 : 소스코드에서 직접 입력된 값을 의미한다. 여기서는 100이라는 정수가 이에 해당한다. 예시 : ( 0 , 0.25, 'A', "test", true ) 3. 변수의 값 쓰기 : 변수에 저장된 값을 이용하는 방법 int total = 100 + score; (100 +..

01. 자바 시작하기

1. 프로그래밍 언어 컴퓨터가 이해할 수 있는 기계어, 사람이 이해하는 자연어의 사이에서 다리역할을 하는 언어 고급언어 : 사람이 이해하기 쉬운 언어, 컴파일러를 통해 기계어로 변환되는 언어(C,C++,Java) 저급언어 : 기계어에 더 가까운 언어(어셈블리어) 소스 : 이러한 프로그래밍 언어로 작성된 내용 컴파일러 : 프로그래밍 언어를 기계어로 변환하는 소프트웨어 프로그램 : 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것 2. 자바의 특징 이식성이 높은 언어 : 대부분의 운영체제에서 사용할 수 있다. (Window, Linux, Unix) 객체지향 언어 : 객체를 만들고 이것들을 조립, 연결하여 전체 프로그램을 완성하는 객체지향 언어이다. 함수적 스타일 코딩을 지원 : Java 8버전 부터 람다식..

1. 자료형 정리

1. 자료형 [기본형] : 실제 값을 변수에 가지고 있음. [참조형] : 실제 값이 들어 있는 메모리 주소를 가지고 있음. [기본형] - 논리형 (boolean) - true,false - 문자형 (char) - 'a', '1' , '-' - 정수형 (byte, short, int, long) - byte : -128 ~ 127 short : -32,768 ~ 32,767 int : -2,147,483,648 ~ 2,147,483,647 long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 - 실수형 (float, double) float : (3.4 X 10-38) ~ (3.4 X 1038) double : (1.7 X 10-308) ~ (1.7..

5. 셀레니움 동작 코드

1. ChromeDriver 자동다운과 특정 url을 파라미터로 받아 실행하게끔 필자가 만든 ChromeApp클래스이다. 기본적으로 static void setup()은 클래스로부터 인스턴스가 만들어질 때 한번 세팅되며, 이때, chromeDriver가 생성된다. setChromeUrl : 접속할 url을 설정한다. startChrome : 옵션을 세팅하여 브라우저를 연다. getDriver : 변수로 저장하고 있는 driver객체를 넘긴다. setChromeUrl : 파라미터로 받은 URL로 이동한다. closeChrome : driver 자원을 close한다. 2. Java AWT와 연계하여 Korail(코레일) 홈페이지의 자동 로그인 테스트를 해보았다. (일부코드는 보안상 지움) 리소스 관련한 코드..

4.셀레니움 setup 코드

필자는 이전 Dependency 설정에 셀레니움 4버전을 사용하였다. 기존 3버전과의 큰 차이라고 함은 ChromeDriver에 대한 설정을 따로 안하며, 동적으로 자신의 Chrome 버전에 맞게 다운해주고 연결하는 설정이 가능하다는 것이다. 기존 소스와 현재 나의 소스를 비교하는 방식으로 작성하겠다. [기존] 1. 자신의 크롬 버전에 맞는 크롬 드라이버를 설치한다. (https://chromedriver.chromium.org/downloads) 2. Java코드에 셀레니움 import를 위한 jar를 다운받는다.(maven, gradle의 경우 dependency 설정으로 가능함) 3. 아래 소스를 통하여 다운받은 크롬드라이버로 브라우저를 통제한다. WebDriver driver = webdriver..

2.셀레니움의 동작원리

1. 개발자는 Python, Java와 같은 언어를 이용하여 개발을 하게 된다. 2. 위의 개발을 통해 만들어진 프로그램은 구동시 JSON 형식을 통하여 Selenium WebDriver 모듈을 작동시키는 것으로 보임 (import, dependency를 동하여 모듈을 끌어와야 함) 3. WebDriver는 실제 브라우저를 통제하게 되는데, 프로토콜은 HTTP로 보임. https://kadensungbincho.tistory.com/75 셀레니움 내부구조 (Selenium Internals) 이 글에서는 자동화 웹 테스트나 웹 스크래핑을 진행해보셨다면, 한 번쯤은 들어보셨을 셀레니움(Selenium)의 내부구조를 살펴보려 합니다. 먼저 넓은 범위의 아키텍쳐를 살펴보고, 실제 주요 로 kadensungbi..

1.셀레니움이란

셀레니움이란 셀레니움은 웹 애플리케이션 테스트를 위한 프레임워크입니다. 웹에 하는 명령을 코드화시켜서 작동시킵니다. 다양한 브라우저 작동을 지원하며 크롤링에도 활용됩니다. 현존하는 거의 모든 웹브라우저를 다양한 언어를 통해 제어 가능합니다. 크롤링에서는 정적, 동적 페이지 크롤링으로도 접근이 불가능한 데이터에 접근할 때 유용하게 사용됩니다. -> 브라우저(웹)에서 사용자가 화면(클릭, 입력, 화면, 데이터) 에 대하여 코드로 통제할 수 있는 자동화 테스트 툴이다. 필자는 크롤링, 매크로를 위하여 해당툴을 사용하였다. 참조한 사이트 : https://luminitworld.tistory.com/90 셀레니움(selenium)으로 크롤링(스크래핑) ( 본 글의 크롤링은 크롤링이라기보다 스크래핑이 더 가깝습니..

3.셀레니움 Java Dependency

Java에서 셀레니움을 사용하기 위해서는 jar파일들이 필요하다. 다음은 필요한 jar파일들을 위한 gradle dependency 설정이다 compile group: 'org.seleniumhq.selenium', name: 'selenium-support', version: '2.43.1' implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.8.0' implementation("io.github.bonigarcia:webdrivermanager:5.3.3") selenium-java : 셀레니움을 기동하는 Driver와 같은 필수 요소들을 포함한 jar(필수임) selenium-support : 셀레니움..