Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

레거시 델파이 코드 현대화! 엠바카데로 MVP와 살펴보는 방법 & 데브기어 컨설팅 지원 받기


Recommended Posts

 

Modernizing legacy code poses less of challenge than may seem at first sight, as long as the right tool is deployed. In an on-demand webinar from DelphiCon, Embacadero MVP Oren Aviram discusses the challenges of legacy code modernization, and presents Delphi Parser, an intelligent find-and-replace tool that knows Delphi syntax and can even link between objects through code. It’s a Delphi robot that can update an application without harming the legacy code.

레거시 코드를 현대화하는 것은 처음 마주했을 때 생각했던 것보다 그렇게 큰 과제가 아닐 수 있다. 올바른 도구로 배포되었다면 말이다. 델파이콘(DelphiCon) 웨비나에서 엠바카데로 MVP Oren Aviram은 레거시 코드 현대화 과제에 대한 내용을 다루었다. 이 세미나에서 델파이 구문을 파악하고 코드를 통해 오브젝트 간 연결까지 가능한 지능형 검색 및 교체 도구인 델파이 파서(Delphi Parser)를 소개하기도 했다. 델파이 파서는 일종의 델파이 로봇으로, 레거시 코드로 된 애플리케이션을 손상없이 업데이트 할 수 있는 방법이다.

 

But first, let’s look at the reasons behind any given company’s dilemma between modernizing their legacy systems despite their issues, or sticking to “what works” no matter how much times change.

하지만 우선, 이슈가 있음에도 기업이 레거시 시스템을 현대화하는 것과 시간이 흘러도 "작동하는 것"을 고수하고자 하는 것 사이의 딜레마에 빠지게 되는 이유를 살펴보아야 한다.

 

동기와 추진

Why do companies refrain from modernizing their systems? According to Oren Aviram, the three main reasons are:

왜 기업은 시스템 현대화를 꺼리는가? Oren Aviram이 주장하는 세 가지 이유는 다음과 같다:

  1. 기업은 모든 것이 "아직 작동한다"고 주장한다.
  2. 기업은 "사용 가능한 대안이 없다"고 확신한다.
  3. 기업은 현대화를 원하지만, 방법을 모른다.

And what are the main drivers for modernization decisions?

현대화를 결정하는 주된 이유는 무엇인가?

  1. 윈도우 10과 11을 지원해야 한다.
  2. 델파이 11 기능을 활용하고 싶다.
  3. BDE와 오래된 데이터베이스를 교체하고 싶다.
  4. 성능, 탄력성, 보안 개선이 필요하다.

 

spacer.png

 

Oren Aviram’s “Delphi Modernization Made Easy” presentation for DelphiCon is a detailed foray into the challenges software developers have faced in modernizing their systems to keep up with the rapid pace of technological advances. He also distills the process of modernization into its constituent parts and aspects, offering the reader a clear understanding of what modernizing Delphi applications entails.

Oren Aviram가 델파이콘에서 진행한 "델파이 현대화를 쉽게 (Delphi Modernization Made Easy)"는 소프트웨어 개발자들이 빠른 기술 발전 속도를 따라잡기 위해 시스템 현대화 과정에서 직면하는 문제들을 자세히 다룬다. 현대화 과정을 부분과 양상으로 확장해 살펴봄으로써 델파이 애플리케이션 현대화가 어떤 결과를 만들어내는지를 명확하게 설명한다.

Below is the transcript of the session:

다음은 각 세션에 대한 설명이다:

 

델파이 현대화를 쉽게 [온디맨드 웨비나]

Your host for this session is Oren Aviram. Oren is a legacy Delphi modernization expert and also an Embarcadero Delphi MVP. Oren is the founder and lead developer at Pacifity Technologies Limited, the home of the Delphi Parser automatic modernization tools.

본 세션의 진행자인 Oren Aviram은 레거시 델파이 현대화 전문가이자, 엠바카데로 델파이 MVP이다. Oren은 델파이 파서(Delphi Parser) 자동 현대화 도구의 본체인 Pacifity Technologies Limited 설립자이자 리딩 개발자이다.

Our session agenda is as follows. We will start with an overview of the legacy IT systems around the world in general and specifically in Delphi as of 2021. We will explain what is a legacy IT system, how they became legacy over the years, and discuss why Borland Delphi is a legacy system.

우선 전 세계 레거시 IT 시스템 개요부터 소개한다. 2021년 기준 전 세계, 특히 델파이의 레거시 시스템부터 살펴본다. 그리고 레거시 IT 시스템이란 무엇인지, 어떻게 수년에 걸쳐 레거시 프로그램이 되었는지, 왜 볼랜드 델파이가 레거시 시스템인지에 대해서도 설명한다.

We will discuss why there is a need to modernize a working Delphi IT system, as well as the benefits of it. We will discuss the legacy Delphi modernization challenges and how to overcome those obstacles.

지금도 작동하고 있는 델파이 IT 시스템을 현대화해야 하는 이유와 그 이점에 대해서도 설명한다. 그리고 레거시 델파이 현대화 과제와 이러한 장애물을 극복하는 방법도 소개한다.

We will review how you can quickly and easily modernize your Delphi IT system and upgrade your Borland Delphi code to latest Embarcadero Delphi 11 using the Delphi parser automatic modernization tools, and then how to bridge the gap of legacy technology to 2021.

여러분의 델파이 IT 시스템을 쉽고 빠르게 현대화하는 방법과 볼랜드 델파이 코드를 최신 엠바카데로 델파이 11로 델파이 파서 자동 현대화 도구를 사용해 업그레이드 하는 방법, 그리고 레거시 기술의 격차를 메우는 방법을 소개한다.

 

레거시 기술 격차를 해소하고 노후한 기술 장애 극복하기

Let’s try to answer the gazillion dollar question: What holds organizations from modernizing their legacy IT system? The immediate answer is because it works. They won’t modernize these IT systems because they work, although with poor performance and security risks, but it works.

수많은 질문에 답해보자: 기업이 레거시 IT 시스템 현대화를 망설이는 이유는 무엇인가? 바로 대답하자면, 작동하기 때문이다. 낮은 성능과 보안 위험이 있지만, 여전히 작동하기 때문에 망설이는 것이다.

Maybe because although they are aware of the situation, they simply think that they don’t have any other options. Maybe they do want to modernize but simply don’t know how.

상황을 파악하고는 있을 것이다. 그저 단순히 다른 선택권이 없다고 생각하는 것이다. 아마도 현대화를 하고는 싶겠지만, 단순히 방법을 모르는 것일 수도 있다.

I am sure it’s not because they don’t want to purchase the new Delphi 11. They will love to work on Windows 10 or nowadays Windows 11. They will love to upgrade the code to work with the new Delphi 11 and make use of all the new technologies.

새로운 델파이 11을 구매하고 싶지 않아서..라는 이유는 아닐 것이 틀림없다. 분명 윈도우 10이나 최신 윈도우 11에서 작업하고 싶어할 것이라고 본다. 그리고 새로운 델파이 11로 작업하고, 새로운 기술을 활용해 코드를 업그레이드하고 싶을 것이다.

They will love to get rid of the BDE and move to FireDAC. They will love to get rid of Paradox, old InterBase or Firebird versions and move to modern databases.

BDE를 없애고 FireDAC으로 옮기고도 싶을 것이다. 파라독스(Paradox), 오래된 인터베이스나 파이어버드(Firebird) 버전을 없애고 최신 데이터베이스로 바꾸고 싶어들 한다.

They will love to get high performance, high resilience and top security, both for them and their customers. So why won’t they modernize? Something must hold them back. We will try to solve this mystery.

기업은 물론 고객을 위해서도 고성능, 높은 복원력, 최고의 보안을 제공하고 싶을 것이다. 그렇다면 대체 왜 현대화를 하지 않을까? 무언가 이들을 막고있는 것이다. 이 미스테리를 풀어보고자 한다.

Legacy modernization of IT systems is a serious issue. Well, I suppose that if a business or any organization could have modernized its software in the past 20 years, I believe it would’ve done it already. I also believe that there are many developers that keep on following the technology as it changes and want to be a step ahead of everyone. But businesses as well as organizations don’t work that way.

IT 시스템 레거시 현대화는 중요한 이슈이다. 기업이나 조직이 지난 20년간 이들의 소프트웨어를 현대화할 수 있었다면, 이미 진작 했을 것이라고 생각한다. 그리고 많은 개발자들이 기술 변화를 계속해서 따라가고 싶고, 다른 사람들보다 앞서 나아가고 싶어할 것이라고 생각한다. 하지만 기업이나 조직이 그렇게 일을 진행하지를 않는다.

spacer.png

 

Well, let’s go back to the late nineties to the times of Windows. In fact, let’s go back to the eighties to the times of DOS. Actually, let’s go back to the sixties to where it all began. In the sixties, IBM developed the Cobol for its mainframes. It was developed for the US Department of Defense for data processing. That is how they called it back then.

자, 90년대 후반 윈도우 시절로 돌아가보자. 아니 80년대 도스(DOS) 시절로 돌아가보자. 조금 더, 60년대 이 모든 것이 시작되었던 그 때로 돌아가보자. 60년대, IBM은 메인프레임용으로 코볼(Cobol)을 개발했다. 데이터 처리를 위한 용도로 미 국방부를 위해 개발한 것이다. 

Quickly came the banks and the insurance companies that invested in IBM mainframes to computerize their business and control inventory and have control of money. Our money. They were both very happy back then, working with Cobol.

IBM 메인프레임에 은행과 보험사들이 빠르게 투자하면서 이들의 사업을 전산화하고 재고를 제어하고, 자산을 통제하게 되었다. 우리의 자산. 당시 그들은 코볼로 업무를 하면서 매우 행복해했다.

60 years later, they are still there with Cobol. Less happy, but still working. But what happened? Why didn’t they modernize their mainframes to modern operating systems, to DOS in the eighties to Windows in the late nineties? They do have the money for it. They own it. They do have all the knowledge. They have all the experts. They do have all the time, effort, and manpower to do that. I guess it is not because they didn’t want to. It is because they couldn’t and still cannot today. Why? Well, it’s all about the money, the almighty dollar.

60년이 지나고, 지금도 이들은 코볼을 사용하고 있다. 하지만 여전이 작동한다. 무슨 일이 있었던 것일까? 왜 이들은 운영체제를 80년대 도스(DOS)에서 90년대 후반의 윈도우(Windows)로 메인 프레임을 현대화하지 않은 것일까? 이에 대한 비용은 있다. 보유하고 있다. 모든 지식도 있다. 전문가도 있다. 이 작업을 위한 모든 시간, 노력, 인력. 모든 것이 있다. 내 생각에 원하지 않았던 것은 아닌 것 같다. 단지 할 수 없었고, 지금도 할 수 없기 때문이다. 그 이유는? 모두 돈과 관련된 것이다. 매우 중요시되는 돈 말이다.

In short, these monetary systems were up and running ever since the early sixties. As they became productive and as the years went by super productive, our civilian life became so dependent on them like oxygen. They became unstoppable. They were running day and night through all the major events in US history, getting stronger and stronger with all the technology races, decade after decade, generation after generation, controlling more and more aspects of our lives until they became an integral part of our being.

간단히 말해서, 이러한 통화 시스템은 60년대 초부터 진행되고 있었다. 생산을 하게 되고, 해가 거듭되면서 우리의 삶은 그들에게 의지하게 되었다. 산소처럼 말이다. 이들은 멈출 수 없게 되었다. 미국 역사의 모든 주요 사건들 속에서도 밤낮으로 움직였고, 기술 경쟁으로 더욱 더 강해졌다. 10년 뒤 또 10년, 세대와 세대를 거듭하며 우리의 필수 부분이 될 때까지 우리 삶의 더욱 더 많은 부분을 통제했다.

Let’s face it; money today is no longer a paper bill, but a number in your bank account. Furthermore, all your being is nothing but an ID number in the registry, along with some files that tells the world who you are. Nothing stopped this monetary monster ever since this was brought to life. Not the Cold War, Northern nuclear race, Vietnam War, the man on the moon, Kennedy Watergate or the Civil Rights movement, nor the 9-11 terror attacks nor the Wannacry cyberattacks or nowadays the Coronavirus. Yes, even the Coronavirus pandemic that aimed to shut down the whole world couldn’t stop them. They are unstoppable.

현식을 직시하자. 오늘날 돈은 더 이상 종이 지폐가 아닌 은행 계좌에 있는 숫자이다. 여러분이 존재한다는 것은 아무것도 아니며, 여러분이 누구인지를 세상에 알려주는 파일에 등록되어 있는 레지스트리 상의 ID 숫자일 뿐이다. 이러한 화폐 괴물을 막을 것은 아무 것도 없었다. 냉전, 베트남 전쟁, 달 착륙, 케네디 워터게이트, 인권 운동이나 9-11 테러, 워너크라이 사이버테러, 지금의 코로나 바이러스도 하지 못했다. 전 세계를 폐쇄하게 한 코로나바이러스 팬데믹도 이를 멈출 수는 없었다. 막을 수가 없다.

Now, seriously, most of the businesses and organizations who are reluctant to run a modernization process will simply say they’re running Delphi with BDE and Paradox and deployed it to thousands of customers over the years simply cannot make the switch. It’s impossible. They are paralyzed from the idea of having to do that renovation because of the lack of knowledge or expertise.

진지하게 살펴보면, 현대화 프로세스 진행을 꺼리는 대부분의 기업과 조직은 단순히 BDE와 파라독스로 된 델파이를 구동하며 수년간 수 천 명의 고객에게 프로그램을 배포해왔고, 이를 전환할 수가 없다고 말할 것이다. 이렇게 보면 불가능하다. 문제는 이들은 전환을 위한 지식이나 전문가가 부족해 진행할 수 없다는 생각에 사로잡혀 있다는 것이다.

How can we stop a machine that works? “It is not worth the effort. This will kill my business. I will lose my job. I don’t know what to do. How will I do it? Who will do it? It will take forever. It will cost a fortune. It won’t work right. I cannot make these changes all by myself. I will need to run endless tests to make sure it works. Like before deployment will be a disaster. You won’t take me alive”.

작동하는 기계를 어떻게 멈출 수가 있을까? "노력할 가치가 없는 것이다. 내 사업이 망하게 될 것이고, 직업을 잃게 될 것이다. 무엇을 해야 하는지 모르겠다. 어떻게 해야 할까? 누가 할 수 있을까? 영원히 해야할 지도 모른다. 비용도 많이 들 것이다. 제대로 되지 않을 것이다. 나 혼자서는 이 모든 것을 바꿀 수가 없다. 작동하는지 확인하기 위해서 계속해서 끝없이 테스트를 해야 할 것이다. 배포 전과 마찬가지로 재앙이 될 것이다. 살아갈 수 없을 것이다."

Well, that is why I’m here to help, to show you how it is done right without losing your mind.

자, 이 두려움이 바로 내가 여기 있는 이유이다. 이제 정신을 잃지 않고 어떻게 제대로 하면 되는지를 보여주려고 한다.

Need answers to questions about modernizing your software? CONTACT US!

소프트웨어 현대화 관련 질문에 대한 답을 받고 싶다면? 지금 데브기어로 문의하기 바란다.

 

spacer.png

 

델파이 코드 제어하기

Here are the following steps you need to do in order to take control over your Delphi code.

델파이 코드 제어를 위해 확인해야 하는 단계는 다음과 같다.

Understand the ecosystem of your code
코드 생태계를 이해한다.

Analyze your Delphi code
델파이 코드를 분석한다.

Assess your modernization needs
현대화 니즈를 평가 분석한다.

Take a test drive in the new Delphi 11
새 델파이 11에서 테스트 작동을 해본다.

Modernize your components
컴포넌트를 현대화한다.

Untie legacy code dependencies
레거시 코드 종속성을 해소한다.

Understand the world we live in. In order to take control over your Delphi code, you need to understand how your IT system works and operates within the whole ecosystem. A legacy IT system is like a solar system. It is a complex environment. It wasn’t built in a day. Some may even say it was there from the beginning of time. Legacy IT systems were built in layers, one on top of the other over the years and yet they are still evolving.

우리가 살아가는 세상을 이해해야 한다. 델파이 코드를 제어하려면, 여러분의 IT 시스템이 전체 생태계에서 어떻게 작동하고 운영되는지를 이해해야 한다. 레거시 IT 시스템은 태양계와 같다. 복잡한 환경이다. 하루 아침에 만들어진 것이 아니다. 태초부터 있었던 것이라고 말하는 사람이 있을지도 모르겠다. 레거시 IT 시스템은 여러 해에 걸쳐 여러 계층으로 구축되었지만, 계속해서 진화하고 있다.

Each layer has its own purpose in life. Even though some of them have already become obsolete by now, they are still there. Legacy IT systems consist of a variety of hardware, network protocols, operating systems, types of user interface models, database servers, reports engines, as well as many other applications and services all surrounding a huge centric monster application hoping it won’t become a red giant and explode one day.

각 계층은 목적이 있다. 그 중 일부는 이미 지금쯤 쓸모 없어졌을지도 모르지만, 여전히 존재하고 있다. 레거시 IT 시스템에는 여러 구성요소가 있다. 하드웨어, 네트워크 프로토콜, 운영체제, 사용자 인터페이스 모델 유형, 데이터베이스 서버, 리포트 엔진, 어느 날 폭발해버리지 않기를 바라는 기이할 정도로 큰 애플리케이션을 둘러싸고 있는 많은 다른 애플리케이션과 서비스들로 말이다.

 

수백만 줄의 레거시 코드 처리하기

Delphi legacy IT systems rely on their code. Millions of lines of code spread in files and folders as much as thousands of files. Legacy Delphi IT systems code is very centric, unlike modern IT systems that are thin, agile and divided for many small services all speaking to each other in the same protocol. A typical legacy Delphi IT system consists of one main huge application that connects directly to the database server in one legacy network protocol like the BDE and to all other peripheral application and services, each one via its own specific network protocol.

델파이 레거시 IT 시스템은 코드에 의존한다. 수백만 줄의 코드는 수천 개의 파일만큼이나 파일과 폴더에 퍼져있다. 레거시 델파이 IT 시스템 코드는 중앙집중형이다. 이는 간소화되고 애자일한, 동일한 프로토콜로 모두 통신할 수 있는 여러 작은 서비스로 나뉘어져있는 현대화된 IT 시스템과는 다르다. 전형적인 레거시 델파이 IT 시스템은 하나의 거대한 메인 애플리케이션이 있고, 여기에서 BDE와 같은 하나의 레거시 네트워크 프로토콜로 데이터베이스 서버와 특정 네트워크 프로토콜을 통해 다른 주변 애플리케이션과 서비스에 직접 연결한다.

Database oriented legacy Delph IT usually consists of huge amount of hard code sequel queries instead of stored procedures as in modern Delphi code. Modernization of legacy Delphi code requires a profound strategy of analyzing mapping and replacing old code, like the related BDE code to a new code, like FireDAC in all the places in the source code.

데이터베이스 지향적인 레거시 델파이 IT는 일반적으로 엄청난 양의 하드 코드 결과로 짜여진 쿼리로 되어있다. 현대화된 델파이 코드에서처럼 저장 프로시저로 되어 있지 않은 것이다. 레거시 델파이 코드를 현대화 하기 위해서는 오래된 코드를 교체하고 매핑하는 심오한 분석 전략이 필요하다. BDEㅍ코드는 새로운 코드로, 소스 코드의 모든 위치에 FireDAC을 사용하는 것처럼 말이다.

spacer.png

 

Doing it manually, it is a very hard and dirty task. There are many tools that can help you analyze your code and automate the code conversion process. You can start by using a simple editor to find and replace code syntax, but a blind replacement won’t help controlling changes in millions of lines of code spread in so many files. If you wish to automate this process, there are many text replacement tools in the Internet. Some of them are free to use.

수작업은 너무 힘들고 난잡한 작업이다. 여러분의 코드를 분석하고, 코드 변환 프로세스 자동화를 지원해주는 도구들이 정말 많다. 간단한 편집기로 코드 구문을 찾고 변경해가면서 작업을 시작할 수도 있지만 확인하지 않는 변경은 너무나 많은 파일에 퍼져있는 수백만 줄의 코드 변경을 제어하는데 도움이 되지 않을 것이다. 이 작업을 자동화하고 싶다면, 인터넷에서 정말 많은 구문 변경 도구를 찾을 수 있다. 심지어 무료 도구들도 있다.

You can even try Embarcadero’s refined tool. It’s a free and simple command line tool that finds and replaces text based on a regular expression algorithm.

엠바카데로 refind 도구는 무료이자, 단순한 커맨드 라인 도구로 정규 표현식 알고리즘에 기반한 구문 검색 및 변경 도구이다.

Handling conversion of syntax within millions of lines of code requires more than that. What you are looking for is an intelligent Find and Replace tool that knows Delphi syntax and understands code logic and can even link between objects through the code like a human developer will do.

수백만 줄의 코드에서 구문 변환을 처리하려면 그 이상의 것이 필요하다. 여러분이 찾고 있는 것은 델파이 구문을 알고, 코드 로직을 이해하는, 그리고 인간 개발자가 하는 것처럼 코드를 통해 객체간 연결까지 할 수 있는 지능형 검색 및 변경 도구일 것이다.

A bot that reads and writes Delphi code, a Delphi code robot. This kind of robot will be very helpful. A robot that can quickly read all the source code in all the files through all the projects, not afraid of dealing with millions of lines of code. A robot that can simply load it all to its runtime memory, analyze it all, quickly link between all the code objects and all the libraries, and clearly understand what exactly is needed to be done.

델파이 코드를 읽고 쓰는 봇, 델파이 코드 로봇말이다. 이런 봇은 정말 유용할 것이다. 모든 프로젝트에 있는 파일의 소스 코드를 빠르게 읽고, 수백만 줄의 코드 처리에도 어려움이 없는, 그리고 런타임 메모리를 간단히 불러오고, 분석하고, 코드 객체와 라이브러리를 빠르게 연결하고, 정확하게 무엇을 해야 하는지를 완벽하게 이해하는 로봇.

It would be great if it can even link between data related code and database schemes and queries. A robot that will change the code and guarantee that it does not harm the legacy code on the process of rewriting the old code.

데이터 관련 코드와 데이터베이스 스키마, 쿼리를 연결할 수도 있다면 최고일 것이다. 코드를 변경하고, 오래된 코드 재작성 과정에서 레거시 코드를 손상시키지 않을 로봇이라면 말이다.

With no manmade bugs, with no exceptions, with no learning curve, with no mood changes, with no complaints, with no risks, fast as lightning like a super developer, like an army of developers, like magic.

사람이 만들어내는 버그도, 예외처리도, 학습 곡선도, 문법 변경도, 컴플레인도, 위험도 없는 슈퍼 개발자처럼, 개발 군대처럼, 마법처럼 번개만큼 빠르게.

Luckily for you, there’s a robot like this. It is the Delphi Parser. The Delphi parser is your robot. Using the Delphi Parser provides you total control over your code conversion. The automatic analysis in conversion process reduces manual coding, labor costs and speeds up time to market. The Delphi Parser enables you to run a well-managed migration process with no black holes on a tight budget with a quick and pain-free modernization process. The Delphi Parser is known for providing a highly efficient modernization process with fast results and with an affordable price.

다행히도 바로 이런 로봇이 있다. 델파이 파서(Delphi Parser)가 그것이다. 델파이 파서는 여러분의 로봇이다. 델파이 파서로 코드 컨버전을 완전히 제어할 수 있다. 컨버전 과정의 자동 분석으로 수동 코딩, 작업 비용은 줄이고 출시 기간은 단축할 수 있다. 델파이 파서를 사용하면 빠듯한 예산 이슈 없이도 빠르고 고통없는 잘 관리된 마이그레이션 프로세스를 수행할 수 있다. 델파이 파서는 신속한 결과와 합리적인 가격으로 매우 효율적인 현대화 과정을 제공하는 것으로 알려져 있다.

 

레거시 코드 평가하기

In order to run a successful modernization process, you need to get an assessment of your code. It is like when you want to buy a car or a house, you need to check out some things before making the final decision. If you have a Delphi based IT system using BDE or like and you wish to modernize it and simply don’t know how to start, what to do or expect, we can provide you with a free Assessment for Modernization tool. Quickly download the free edition of the Delphi Parser automatic migration wizard and let it run on your code. You can sit back and enjoy the show while the migration process is in action, migrating your own code in runtime memory. The migration wizard is provided with a built-in migration script, consisting of common commands that fits most legacy code, so as expected, the Delphi robot already knows what to do.

현대화 프로세스를 성공적으로 진행하기 위해서는, 여러분의 코드를 먼저 평가해야 한다. 자동차나 집을 구입할 때처럼, 최종 결정을 내리기 전에 몇 가지 확인이 필요하다. BDE 등을 사용한 델파이 기반 IT 시스템을 현대화하고 싶고 어떻게 시작해야 할지, 무엇을 해야할지를 모르는 분들을 위한, 무료 현대화 평가 도구도 제공한다. 델파이 파서 자동 마이그레이션 마법사(Delphi Parser Automation Migration Wizard) 무료 에디션을 바로 다운로드 받아, 코드에 적용해보자. 여러분은 가만히 앉아서 마이그레이션 프로세스가 실행되는 동안 런타임 메모리에서의 코드 마이그레이션을 지켜보면 된다. 마이그레이션 마법사는 대부분의 레거시 코드에 맞는 공통 커맨드로 구성된 마이그레이션 스크립트가 기본 제공된다. 생각한대로 델파이 로봇은 이미 무엇을 해야할 지 이미 알고 있다.

spacer.png

 

Later, if you wish to instruct the migration wizard to handle specific modernization requests, you can easily tell the robot what to do and it will do what is required with pleasure. As the migration process finishes, you’ll be able to review the changes. The Delphi Parser Migration Wizard provides you answers to important questions like: Exactly how many lines of code do I have through all my projects? How many files in use, what components are being used? Where and how much? How long will it take the migration wizard to convert it all? How many lines of code will be converted? Does it really work?

이후 마이그레이션 마법사에게 특정 현대화 요청을 처리하도록 지시할 때는, 로봇에게 해야할 작업을 쉽게 지시할 수 있고 로봇은 이를 기쁘게 처리할 것이다. 마이그레이션 프로세스가 완료되면, 변경 사항을 검토할 수 있다. 델파이 파서 마이그레이션 마법사는 다음과 같은 중요한 질문에 대한 답을 준다: 정확하게 전체 프로젝트에 몇 줄의 코드가 있었는가? 사용중인 파일양은 얼마나 되며, 어떤 컴포넌트가 사용되고 있었는가? 어디에서 사용되었고 그 양은 얼마나 되는가? 마이그레이션 마법사가 이 모든 걸 컨버팅하는데 얼마나 소요되었는가? 얼마나 많은 코드줄이 컨버팅되었는가? 실제로 작동하는가?

 

델파이 코드 분석하기

20 years of software development generated a lot of code and mapping. It is a lot of work. The code resides within millions of lines of code, hundreds of files spread around and shared in many projects within many folders. Understanding what makes your application work is the key to success. If you lead a well-documented code and know exactly what is going on in your code, then it may be easy for you to make this analysis.

20년의 소프트웨어 개발은 많은 코드와 매핑을 만들어냈다. 많은 일을 했다. 코드는 여러 폴더, 많은 프로젝트에서 공유되고 여기 퍼져있는 수백 개의 파일, 수백만 줄의 코드에 존재한다. 애플리케이션을 작동하게 만드는 요소를 이해한다는 것은 성공의 열쇠이다. 여러분이 잘 문서화된 코드를 사용해, 코드에서 일어나는 일을 정확하게 알고만 있다면, 분석이 쉬워질 수 있다.

Truth must be told, but Legacy Delphi code suffers from lack of documentation. In most cases it has also been developed with no version control. This is due to the fact that 20 years ago developers weren’t aware of documentation procedures or version control. Mostly, they were not aware of the fact that their code will be relevant for the next 20 years.

레거시 델파이 코드는 사실 문서 부족으로 어려움이 있다. 대부분의 경우, 버전 컨트롤없이 개발되어 왔다. 이는 20년 전의 개발자들은 문서화 절차나 버전 컨트롤을 잘 알고있지 못했기 때문이다. 대부분은 그들이 작성한 코드가 20년 뒤에도 영향을 미칠 것이라는 걸 알지 못했다.

Using the Delphi Parser’s Code Dependencies Analyzer, you can quickly, easily analyze your Delphi code and get a deep insight into millions of lines of code that was written in the past 20 years and get to places where no human developer has reached ever since.

델파이 파서의 Code Dependencies Analyzer를 사용하면, 빠르고 손쉽게 델파이 코드를 분석하고 20년 전에 작성된 수백만 줄의 코드도 심층적으로 파악할 수 있다. 또한 인간 개발자가 이전에는 도달할 수 없었던 지점까지 파악할 수도 있다.

The Delphi Parser Code Dependencies Analyzer is a very powerful tool. It can scan a complete Delphi project code and link it with all its class libraries like a compiler does, but instead of producing a runtime code, it produces a cross-referenced objects analysis report.

델파이 파서 Code Dependencies Analyzer는 매우 강력한 도구이다. 완벽한 델파이 프로젝트 코드를 스캔하고 컴파일러가 하는 것처럼 전체 클래스 라이브러리를 연결할 수 있다. 런타임 코드를 생성하는 대신, 상호 참조된 객체 분석 보고서를 만들어낸다.

The analyzer can scan all types of source code. Delphi system units and library source code through all versions from Borland Delphi 1 to the latest Embarcadero’s Delphi 11, Third party component library source code, your own proprietary code base units and classes, Delphi five form modules, or DFM files.

Analyzer는 모든 유형의 소스 코드를 스캔할 수 있다. 볼랜드 델파이 1부터 최신 엠바카데로 델파이 11까지 모든 버전의 델파이 시스템 유닛과 라이브러리 소스 코드는 물론 써드 파티 컴포넌트 라이브러리 소스 코드, 직접 만든 코드 베이스 유닛과 클래스, 델파이 폼 모듈, DFM 파일들까지 말이다.

 

델파이 컴파일된 유닛 분석하기

The Delphi analyzer works best with reading text-based Pascal source code. In cases you have an unsupported legacy Delphi compiled library in a form of DCU file without any source code, the Delphi analyzer can even read that and expose its hidden classes and methods.

델파이 분석기는 텍스트 기반의 파스칼 소스 코드를 읽어서 작동하는 뛰어난 도구이다. 소스 코드가 없는 DCU 파일 폼에 지원되지 않는 컴파일된 레거시 델파이 라이브러리가 있다면, 델파이 분석기는 이를 읽어내 숨겨진 클래스와 메소드를 보여줄 수 있다.

Yes, you heard me well. The Delphi analyzer can read a Delphi compiled unit, a non-text based DCU file. The Delphi analyzer knows how to decompile a DCU file, reconstruct its objects declaration and expose its and methods, and use it to perform an in-depth analysis for libraries and components with no source code available. This is a very helpful feature that provides you an x-ray vision into compiled code. Using this feature, all the darkest secrets of a legacy Delphi code can be exposed as it clears the way to modernization.

그렇다. 델파이 분석기는 텍스트 기반이 아닌 DCU 파일인 컴파일된 델파이 유닛을 읽을 수 있다. 델파이 분석기는 DCU 파일의 디컴파일, 객체 선언 재구성, 그 자체와 메소드를 노출하고, 사용 가능한 소스 코드가 없는 컴포넌트와 라이브러리에 대한 심층적인 분석을 위해 어떻게 해야하는지를 알고 있다. 델파이 분석기에는 매우 유용한 기능 중 하나는 컴파일된 코드를 x-ray처럼 보여주는 기능이다. 이를 활용해, 레거시 델파이 코드의 모든 어두운 비밀이 현대화 과정에서 명백하게 드러나게 될 수 있다.

 

델파이 코드 분석기(Delphi Code Analyzer)의 주요 기능:

  • 라이브러리에 있는 코드 베이스 스캔
  • 여러 프로젝트 분석
  • 상호 공유 코드 분석
  • 수백만 줄의 코드와 런타임 메모리 핸들링
  • 토큰에 있는 코드 분석
  • 객체 트리 빌드
  • 시멘틱 트리(sementic trees) 빌드
  • 컴파일러와 같이 모든 객체들을 연결
  • 모든 객체, 로컬, 전역 매핑
  • 모든 객체, 참조 표시
  • 모든 유닛 선언 표시
  • 사용되지 않은 코드 표시
  • 블랙홀(black holes) 표시
  • 버그 및 에러 표시
  • 누락된 선언 표시
  • 잘못된 프로그래밍 표시
  • 가능한 SQL 삽입(SQL injections)과 같은 보안 취약점 표시
  • 코드 분석 리포트 작성
  • 전체 객체 상호 참조 리포트 작성
  • 전체 코드 종속성 리포트 작성
  • 코드 토큰 보기 및 트리뷰 활성화
  • 코드상에서 시각화된 드릴 다운 네비게이터 활성화
  • 코드 객체에 대한 강력한 검색 활성화

 

spacer.png

 

The Delphi Parser Code Analyzer is the development manager’s new best friend. It helps development teams to get a control over the code and maintain a cleaned and optimized projects code through the development life cycle.

델파이 파서 코드 분석기(Delphi Parser Code Analyzer)는 개발 관리자를 위한 새로운 최고의 친구이다. 개발팀은 코드를 제어하고, 개발 라이프 사이클 동안 깔끔하고 최적화된 프로젝트 코드를 유지보수 할 수 있다.

You should use it whenever you wish to release a new version or update and you want to remove unnecessary files in libraries from code before it is deployed. You can download a free addition of the Delphi Parser’s Code Dependencies Analyzer and simply run it on your whole code and get a clear view of your components, units, objects and classes.

새 버전이나 업데이트를 릴리스하거나 배포 전 코드의 라이브러리에서 불필요한 파일을 제거하고 싶을 땐 언제든 이를 활용해야 한다. 델파이 파서의 Code Dependencies Analyzer 무료 에디션을 다운로드 받아, 전체 코드에서 실행하기만 하면 컴포넌트, 유닛, 객체, 클래스를 한 눈에 파악할 수 있다.

The Delphi Parser Code Analyzer provides you a deep insight into your Delphi components and shows you what component is being used, how much and where. Once you have a complete mapping of your Delphi components, you can get the full picture of your code and have a profound knowledge of what are the building blocks that make up your IT system.

델파이 파서 Code Analyzer로 델파이 컴포넌트를 심도있게 분석할 수 있으며, 어떤 컴포넌트가 얼마나, 어디에서 사용되었는지를 파악할 수 있다. 여러분이 사용한 델파이 컴포넌트를 완벽하게 매핑하고 싶다면, 코드에 대한 전체적인 그림을 파악할 수 있어야 하며, IT 시스템을 구성하는 요소가 무엇인지를 깊이 이해하고 있어야 한다.

Knowing exactly what makes your code work makes it much easier to control it. Analyzing your code is the key to success in every legacy IT system modernization. Once you analyze your code, you will know what legacy components are necessary for you. Those are the ones you will need to modernize.

여러분의 코드를 작동하도록 만드는 그 무엇을 정확하게 알고 있어야, 이를 컨트롤하는 것이 더욱 쉬워진다. 코드 분석은 곧 모든 레거시 IT 시스템 현대화 성공의 핵심이다. 코드를 분석하면, 어떤 레거시 컴포넌트가 여러분에게 필요한 것인지를 알 수 있다. 이 컴포넌트들이 바로 현대화해야 하는 것들이다.

Now that you know what to do and how, you can start planning your modernization project. In fact, if you already analyzed your code using the Delphi Code Analyzer or ran the Delphi Parser Migration Wizard while I am speaking, you are already running a modernization process.

이제 무엇을, 어떻게 해야하는지 알았으니 여러분의 현대화 프로젝트 계획을 수립해보자. 이미 이 글을 읽으면서 델파이 코드 분석기(Delphi Code Analyzer)로 분석을 끝내고 델파이 파서 마이그레이션 마법사(Delphi Parser Migration Wizard)를 실행해보았다면, 현대화 작업을 시작한 것이다.

Now you can quickly migrate all of the required legacy components to new and modern components as well as discarding those you don’t really use. Let me show you how to do it right.

필요한 레거시 컴포넌트를 모두 새로운 현대화된 컴포넌트로 빠르게 마이그레이션하고, 실제로 사용하지 않는 컴포넌트들은 없애자. 제대로 하는 방법은 아래에 소개하겠다.

 

관리되지 않는 코드 해결하기

Using the Delphi Code Analyzer, you can discover and resolve your unmanaged code. The Delphi Parser Analyzer gets inside black holes, finds lost code, and demolishes any prehistoric ghost that hides in the darkest corners of the legacy code. The fear from these ghosts is probably what keeps you and all other developers from touching the legacy code and prevents you from modernizing your code.

델파이 코드 분석기로 관리되지 않는 코드를 찾아내 해결할 수 있다. 델파이 파서 분석기는 블랙홀에 들어가버린 잃어버린 코드를 찾아내, 레거시 코드의 가장 어두운 구석에 숨어있는 옛 구시대의 유령들을 모두 제거해낸다. 이 유령들에 대한 두려움은 아마도 여러분을 비롯한 모든 개발자들이 레거시 코드를 손댈 때 무엇을 유지해야 하는지에 대한 것이며, 여러분의 코드 현대화를 막는 요소였을 것이다.

Step by step, as you confront all the legacy ghosts like a true Jedi and scare them away, you will gain total control over your code and before you know it, the fear is gone and you become a Delphi warrior.

차근차근 스타워즈의 제다이(Jedi)처럼 레거시 유령들을 모두 상대하다보면, 여러분의 코드를 완전히 제어하게 될 것이다. 그리고 이를 깨닫기 전 이미 여러분의 두려움은 사라지고, 델파이 전사가 되어 있을 것이다.

 

불필요한 컴포넌트와 유닛 제거하기

Once you analyze your whole Delphi code, you realize what components are heavily used and where. More important is that you’ll realize what components are not in use or slightly in use, and can be easily removed from the projects.

전체 델파이 코드를 분석하면, 어떤 컴포넌트가 어디에서 많이 사용되고 있는지를 파악할 수 있다. 더 중요한 것은 사용되지 않거나 어느 정도만 사용중인 컴포넌트가 무엇인지 파악하는 것이며, 프로젝트에서 이를 쉽게 제거할 수 있다는 것이다.

From my experience through all my years of running huge modernization projects, there is nothing that provides more joy than removing unrequired code from projects. Like a good diet that helps you get rid of excessive weight, it makes you feel good about yourself, so are your applications. They will run faster and perform better.

대규모 현대화 프로젝트를 운영해 온 내 경험상, 프로젝트에서 불필요한 코드를 제거하는 것보다 더 즐거운 일은 없다. 과도한 체중을 줄이는데 도움이 되는 좋은 다이어트처럼, 여러분 자신이 좋아질 것이고, 여러분의 프로그램이 좋아질 것이다. 성능과 속도는 더더욱 빨라지고!

Okay, now that we have analyzed the code and understand what we need to modernize and how, we can move forward to modernizing its components. Follow these steps to map your Delphi components in use. Delphi components are divided to three major categories, native and standard Delphi VCL components, third party components, and proprietary components.

자, 이제 코드를 분석하고 현대화 해야하는 부분과 어떻게 해야하는지에 대한 파악이 끝났다면 컴포넌트를 현대화하는 단계로 나아가자. 델파이 컴포넌트를 세 개의 카테고리로 나눌 수 있다. 네이티브 및 표준 델파이 VCL 컴포넌트, 써드파티 컴포넌트, 자체 개발 컴포넌트.

현대화에 대한 질문이 있다면? 데브기어로 문의하면 된다.

 

네이티브 볼랜드 델파이 컴포넌트 현대화하기

Delphi syntax as Object Pascal has not changed much since Delphi 2. It is the same object oriented Pascal language with 32-bit event-driven architecture. The Delphi language has evolved through the years and now supports all new code methodology like generics and automatic reference counting to better control runtime memory management, but it kept its backward compatibility support through all those years, that you can simply take a 20-year-old code that used the native code and components, and simply run it on the latest Delphi 10.4 with minor changes.

오브젝트 파스칼, 델파이 문법은 델파이 2 이후 크게 바뀌지 않았다. 32비트 이벤트 기반 아키텍처의 객체 지향 파스칼 언어와 동일하다. 델파이 언어는 수년간 발전해왔고, 이제 새로운 코드 방법론인 제너릭, 자동 참조 카운팅 등을 지원해 더 뛰어난 런타임 메모리 관리가 가능하다. 계속해서 하위 호환성을 지원해 네이티브 코드와 컴포넌트를 사용한 20년된 코드를 쉽게 불러올 수 있고, 일부만 변경된 최신 델파이 10.4에서도 실행할 수 있다.

 You may be surprised to find that most of the native Delphi components, like the standard VCL components, works perfect on the new Embarcadero Delphi 11 with no change at all.

표준 VCL 컴포넌트와 같은 대부분의 네이티브 델파이 컴포넌트들이 새로운 엠바카데로 델파이 11에서도 완벽하게 작동한다는 사실은 굉장히 놀라울 것이다.

 

네이티브 유니코드 지원

In fact there is a significant change, but you probably won’t see it right away. It is the native Unicode support. Embarcadero’s engineers worked hard through the years to make sure that all the standard VCL components will be native Unicode-based, meaning that all the standard components, Like TEdit, TLabel, TMemo, that works in Borland Delphi as non-Unicode will be automatically Unicode based, with no need to change a single line of code. New Delphi is 100% native Unicode, meaning that all the strings and characters are now native Unicode and you won’t need to make any changes to code to make it Unicode.

사실 중요한 변화가 있었지만, 바로 알아채지는 못했을 것이다. 바로 네이티브 유니코드 지원이다. 엠바카데로 엔지니어들은 수년간 모든 표준 VCL 컴포넌트를 네이티브 유니코드 기반으로 만들기 위해 열심히 일해왔다. 즉 TEdit, TLabel, TMemo 등 모든 표준 컴포넌트들이 단 한 줄의 코드를 변경하지 않고도 비-유니코드(non-Unicode)가 자동으로 유니코드 기반이 되어 볼랜드 델파이에서 작동한다는 의미이다. 새 델파이는 100% 네이티브 유니코드이다. 즉 모든 문자열과 문자가 네이티브 유니코드이며, 이를 유니코드로 만들기 위해 코드를 변경하지 않아도 된다.

As for the code, all string objects are now wide strings as well as TChar is now TWidechar by default. In case you wish to continue work in a non-Unicode environment, you can, but it may require a migration effort. If you find in your code that you need to make specific Unicode or non-Unicode adjustments that spread over your whole code, you can certainly use the Delphi Parser Migration Tool to automate this procedure.

코드에서 모든 문자열 객체는 와이드 문자열이다. TChar가 이제 기본적으로 TWidechar가 된 것처럼 말이다. 비유니코드(non-Unicode) 환경으로 계속 작업을 하고 싶다면, 할 수는 있다. 하지만 마이그레이션 작업이 필요할 수 있다. 코드 전체적으로 특정 유니코드 또는 비유니코드 조정이 필요한 경우, 델파이 파서 마이그레이션 도구를 사용하면 이 작업을 자동화할 수 있다.

 

지원되는 써드파티 컴포넌트 현대화하기

Well, supported third-party components are likely to have a new successor for the latest Delphi and in most cases it will be based on the same structure with backward compatibility support. Some third-party supported components like DevExpress have new additions to all new Delphi 11 editions, but may have significant changes to the structure and will require migration work.

지원되는 써드파티 컴포넌트는 대체적으로 최신 델파이도 지원하는 새로운 버전을 제공한다. 대부분의 경우 이전 버전과 동일한 구조로 되어있어 이전 버전 호환성을 지원한다. DevExpress 등 지원 가능한 써드파티 컴포넌트들은 완전히 새로운 델파이 11 에디션을 지원하는 새로운 에디션을 제공하기도 하며, 구조에 큰 변화를 있는 경우도 있다. 이 경우 마이그레이션 작업이 필요할 수 있다.

This can be done easily by using the Delphi Parser Automatic Migration Wizard by adding specific migration commands to the migration script to make the required change.

Delphi Parser Automatic Migration Wizard를 사용하면 특정 마이그레이션 명령을 추가해 필요한 변경을 수행하는 마이그레이션 스크립트를 손쉽게 진행할 수 있다.

 

지원되지 않는 써드파티 컴포넌트 현대화하기

It is recommended to replace all the unsupported third party components with a corresponding new supported component that have a similar functionality and code.

지원되지 않는 써드파티 컴포넌트는 비슷한 기능과 코드로 구성된 지원 가능한 컴포넌트로 바꾸는 것이 좋다.

If you cannot find a replacement for an important component, which is unlikely, and you have its full source code, check its functionality on the new Delphi 11 and see if it works as expected. If not, you should consider fixing the code to make it work.

중요한 컴포넌트이지만 변경 가능한 컴포넌트를 찾지 못했다면, 컴포넌트의 전체 소스코드를 살펴보아야 한다. 새 델파이 11에서 해당 기능을 확인해보고, 원하는대로 작동하는지를 살펴보기 바란다. 만약 제대로 작동하지 않는다면, 코드 수정을 고려해야 한다.

In the worst case scenario, when you have an unsupported component with no source code and you cannot find a replacement, you should consider abandoning it and remove its functionality from your project’s code.

최악의 경우는 지원 불가능한 컴포넌트인데, 소스코드도 없는 경우이다. 그럼 대체할 컴포넌트를 찾을 수 없으며, 여러분의 프로젝트 코드에서 해당 컴포넌트를 삭제하고 해당 기능을 제거할 것을 검토해보아야 한다.

 

자체적으로 소유한 컴포넌트 현대화하기

Assuming you have all the source code for these components and they are well supported, you can test them to see how they behave on the new Delphi 11. If they need to be fixed, you may easily migrate them to work in Delphi 11.

컴포넌트에 대한 전체 소스코드가 있고, 컴포넌트 지원도 잘 된다는 가정하에 테스트를 통해 새 델파이 11에서 해당 컴포넌트들이 어떻게 작동하는지 살펴볼 수 있다. 고칠 부분이 있다면, 델파이 11로 손쉽게 마이그레이션할 수 있다.

In case they are outdated and unsupported, they should be treated as such and you should consider replacing them with a new third party component or native components. If they are not important, you should consider abandoning them.

컴포넌트들이 오래되고 지원되지 않는다면, 새로운 써드파티 컴포넌트나 네이티브 컴포넌트로 교체할 것을 검토해보아야 한다. 중요한 컴포넌트가 아니라면, 삭제를 고려해보아야 한다.

 

코드 테스트하기

Before you run a full blown modernization process. Invest some time in research and test drive your code in Delphi 11 first. Install the new Windows 11 and play with it for a bit.

이 모든 것들이 복합적으로 해당되는 현대화 과정을 실행하기 전에, 우선 델파이 11에서 코드를 테스트하고 검토할 시간을 가져야 한다. 새 윈도우 11을 설치하고, 사용해보도록 하자.

Test the compatibility of each component in the new Delphi 11. You may be surprised to see how much of them work in the new Delphi 11. Research the web for a new edition of your components in use. Download the latest trial edition and test them on Delphi 11.

새 델파이 11에서 컴포넌트 호환성을 테스트하도록 하자. 새 델파이 11에서 얼마나 많은 일을 해내는지 본다면 놀라게 될 것이다. 사용중인 컴포넌트의 새 에디션을 웹에서도 찾아보자. 델파이 11 최신 평가판 에디션을 다운로드 받아, 테스트해본다.

You can also invest some time with the Delphi Fire Monkey components and try building your first mobile application using Delphi 11. Don’t worry, you don’t need to buy the Delphi 11 yet or any of the components. You can simply install their trial edition and play with them.

델파이 파이어몽키 컴포넌트로 델파이 11에서 모바일 애플리케이션 개발 테스트를 해 볼 수도 있다. 걱정하지말자. 아직 여러분은 델파이 11이나 컴포넌트를 구입할 필요가 없다. 무료 평가판을 설치하고 가지고 놀아보기만 할 수도 있다.

Need answers to questions about modernizing your software? CONTACT US!

소프트웨어 현대화 관련 질문에 대한 답을 받고 싶다면? 지금 데브기어로 문의하기 바란다.

 

결론

Well, this is the end of this session. In this session, we discuss the legacy Delphi modernization challenges and how to overcome those obstacles and bridge the gap of technology to 2021. If you have any questions about Delphi modernization or want to get more information about it, you are welcome to contact the Delphi Parser.

레거시 델파이 현대화 과제와 그 과정의 장애물을 어떻게 극복하고, 2021년까지 발전해 온 기술 격차를 좁히는 방법에 대한 이야기를 해보았다. 델파이 현대화에 대한 질문이나 더 많은 정보, 서비스가 필요하다면 언제든지 문의하기 바란다.

 

데브기어 마이그레이션 지원 서비스

 

이 댓글 링크
다른 사이트에 공유하기

  • RAD changed the title to 레거시 델파이 코드 현대화! 엠바카데로 MVP와 살펴보는 방법 & 데브기어 컨설팅 지원 받기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.